MonorepoでgitHubActionの設定をする
概要
マイクロサービスやクラウド神話が終わり、最近はモノシリックとオンプレでMonorepoな環境でサービス開発をしている人が多いでしょう。
しかし、gitHubActionはMonorepoには対応していないので、少々設定を変更する必要があります。
なのでこの記事では、私が普段利用してるMonorepoのgitHubAction設定方法を公開します。
pathsフィルターの活用
Monorepoではpackageやserviceをディレクトリとして表現するので、特定のディレクトリが変更された時だけWorkflowを実行することになります。例えばテストやビルド時のWorkflowです。
ディレクトリの管理は
pathsフィルター
を使います。
具体例を出して説明します。
サンプルプロジェクトがMonorepoのbranchで、構成は以下とします。
- front フロントのフォルダ
- contracts スマートコントラクトのフォルダ
- backend バックエンドのフォルダ
.githubフォルダ作成
まずはbranchのルートに.githubフォルダを作成します。
mkdir .github
mkdir .github/workflows
構成は以下のようになります
- .github/workflows
- front フロントのフォルダ
- contracts スマートコントラクトのフォルダ
- backend バックエンドのフォルダ
ciファイル作成
続いてciファイルを作成します。
contractsのciなのでci_contracts.ymlの名称にします。
.github/workflowsに設置します。
touch .github/workflows/ci_contracts.yml
構成は以下のようになります
- .github/workflows/ci_contracts.yml
- front フロントのフォルダ
- contracts スマートコントラクトのフォルダ
- backend バックエンドのフォルダ
ciファイル実装
ciファイルにpathsフィルターを記載します。
.github/workflows/ci_contracts.yml
name: CI
on:
push:
branches:
- main
- develop
- feature/*
paths:
- 'contracts/src**'
- '.github/workflows/ci_contracts.yml'
上記は
main, develop, feature/*
branchにおいて
contracts/srcフォルダ配下、もしくは.github/workflows/ci_contracts.ymlが変更された場合にworkflowが実行される
設定になります。
workspaceの設定
lintやtestのjobを実行するworkspaceを設定します。
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./contracts/src
steps:
- uses: actions/checkout@v3
これでworking-directory内でjobsが実行されます。
まとめ
MonorepoでgitHubActionを利用するポイントは
- paths
- working-directory
を利用することです。
ただ、gitHubAction自体がMonorepoをサポートしているわけではないので、細かい設定をしたい場合は、自分でgitHubActionをカスタマイズした方が良いでしょう。
ただし、gitHubActionをカスタマイズすると自由度が増す分、余計な工数や管理コストが増えてしまいます。
なので
gitHubActionでどこまでやるべきか
を明確にして設定をするのが良いでしょう。
Discussion