注目イベント!
春の新人向け連載企画開催中
新人エンジニアの皆さん、2024春、私たちと一緒にキャリアアップの旅を始めませんか?
IT業界への最初の一歩を踏み出す新人エンジニアをサポートする新連載スタート!
mameyose

monorepo-update-checker

| 2 min read

monorepo-update-checker は モノレポの変更有無を配下のプロジェクト(リポジトリ)ごとにチェックできる Action です。

モノレポは Git リポジトリ構成戦略で、あらゆるプロジェクトを一つの Git リポジトリで管理する方式です。相対する戦略はマルチレポです。Google の Chrome などのあらゆるプロダクトが巨大なモノレポで構成されているのは有名です。

モノレポ、マルチレポそれぞれにメリット・デメリットがありますが、モノレポの一番のデメリットは CI を実行するトリガーとなるソースコードの変更検知でしょう。Git や GitHub ではモノレポ・マルチレポを区別する手段が提供されていないため、個別のプロジェクトで発生した変更が全体の変更として検知され CI が実行されます。GitHub Actions を使う場合もそれは例外ではありません。一部のプロジェクトの変更が、システム全体に波及してしまうのはビルドパイプラインとして好ましいものではありません。

monorepo-update-checker はこの問題を解決するために必要なプロジェクトごとの変更有無をチェック可能にする Action です。

GitHub Actions のワークフローでの利用例は以下のようになります。

name: workflow-sample1
on:
  push:
    branches: [ main ]
jobs:
  service1:
    runs-on: ubuntu-latest
    steps:
      - name: Check for update in commit
        id: check
        uses: mamezou-tech/monorepo-update-checkern@main
        with:
          projectPaths: |
            service1:test/service1,test/service1-option
            service2:test/service2
            service3:test/service3
      - name: serivce1 processing
      - if: ${{ fromJSON(steps.check.outputs.results).service1 }}
        run: echo execute processing of service1
      - name: serivce2 processing
      - if: ${{ fromJSON(steps.check.outputs.results).service2 }}
        run: echo execute processing of service2
      - name: serivce3 processing
      - if: ${{ fromJSON(steps.check.outputs.results).service3 }}
        run: echo execute processing of service3

各プロジェクトの変更有無が ${{fromJSON(steps.check.outputs.results).proj }} の形式で取得できるので、その結果に従って GitHub Actions ワークフロー構文の if を用いてビルドやデプロイなど変更に伴う処理をトリガーします。

詳細は README を参照してください。

豆蔵では共に高め合う仲間を募集しています!

recruit

具体的な採用情報はこちらからご覧いただけます。