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 を参照してください。

豆蔵デベロッパーサイト - 先週のアクセスランキング
  1. 基本から理解するJWTとJWT認証の仕組み (2022-12-08)
  2. AWS認定資格を12個すべて取得したので勉強したことなどをまとめます (2022-12-12)
  3. Nuxt3入門(第4回) - Nuxtのルーティングを理解する (2022-10-09)
  4. Viteベースの高速テスティングフレームワークVitestを使ってみる (2022-12-28)
  5. Nuxt3入門(第8回) - Nuxt3のuseStateでコンポーネント間で状態を共有する (2022-10-28)
  6. ORマッパーのTypeORMをTypeScriptで使う (2022-07-27)
  7. Nuxt3入門(第1回) - Nuxtがサポートするレンダリングモードを理解する (2022-09-25)
  8. Jest再入門 - 関数・モジュールモック編 (2022-07-03)
  9. GitHub Actions - 構成変数(環境変数)が外部設定できるようになったので用途を整理する (2023-01-16)
  10. Nuxt3入門(第7回) - Nuxt3のプラグイン・ミドルウェアを使う (2022-10-23)