🐷

GitHub Actions : マルチリポジトリのチェックアウト

2024/11/22に公開

目的

同じ組織の異なるリポジトリをチェックアウトする方法のメモ。

A リポジトリが B リポジトリに依存しているため、A のビルド時に B のコードもチェックアウトしたいみたいなときに使います。

リポジトリのチェックアウト

自リポジトリ

一般的な自リポジトリのチェックアウトは以下のようなシンプルな形です。

- name: Checkout repository
  uses: actions/checkout@v4

別リポジトリ

一方、別リポジトリを取得するのは権限の問題をクリアする必要があります。

  • まず、別リポジトリを取得するためのトークンを用意します。PAT でもよいですが、PAT だと有効期限があるので、GitHub App Token を使うのが便利です。
  • そこで、GitHub App を作成し、インストールします。GitHub App については、他の記事などを参照してください。なお、作成した GitHub App には Repository permissions として、Contents(Read-only), Metadata(Read-only) を付与しました。
  • 作成及びインストールした GitHub App の APP_ID と PRIVATE_KEY を使って、下記のようにして token を作成します。ここでは、GitHub の設定にて記憶させた変数やシークレットを用いて記載しています。
  • 下記に示すように、必ず owner パラメーターもつけてください。
- name: Generate GitHub App Token
  id: generate_token
  uses: actions/create-github-app-token@v1
  with:
    app-id: ${{ vars.HOGEHOGE_APP_ID }}
    private-key: ${{ secrets.HOGEHOGE_APP_PRIVATE_KEY }}
    owner: ${{ github.repository_owner }}
  • 次に、直前に作成した token を使って、別リポジトリをチェックアウトします。
- name: Checkout repository (another repo, because of dependency)
  uses: actions/checkout@v4
  with:
    token: ${{ steps.generate_token.outputs.token }}
    repository: Your-Org-Name/Your-Another-Repo-Name
    # Use same branch name
    ref: ${{ github.ref }}
    # Relative path under $GITHUB_WORKSPACE to place the another repository
    path: hogehoge
    # Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
    persist-credentials: false

Discussion