💾

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