blog.euxn.me

GitHub Actions 内で他の repository の workflow を発火する

2024-02-17 Sat.

安全な Token の取り回しのために GitHub Apps を作成する

今回のような処理自体は Personal Access Token を使用することでもできるが、 Personal Access Token を使用することは推奨されない。 その理由も含め、具体的な設定手順は以下の記事を参考にする。

GitHub Apps トークン解体新書:GitHub Actions から PAT を駆逐する技術

この際 App に付与する権限として、 Actions: Read and write を設定する。

これらの権限設定で GitHub Apps のセットアップ > 4. SecretsにApp IDと秘密鍵を登録する までの手順を実施する。 以降については、次項で説明する。 また、作成した App の repository スコープ(インストール先)は発火対象のみでよい。

別 repository の workflow を発火する workflow を定義する

まず先に、具体的な workflow 定義は以下の通りになる。

1name: trigger-mirror
2on:
3 push:
4 branches:
5 - main
6 workflow_dispatch:
7
8jobs:
9 trigger-mirror:
10 runs-on: ubuntu-latest
11 steps:
12 - uses: actions/checkout@v2
13 - uses: actions/create-github-app-token@v1
14 id: app-token
15 with:
16 app_id: ${{ secrets.APP_ID }}
17 private_key: ${{ secrets.PRIVATE_KEY }}
18 repositories: <target-repo>
19 - uses: actions/github-script@v7
20 with:
21 github-token: ${{ steps.app-token.outputs.token }}
22 script: |
23 await github.rest.actions.createWorkflowDispatch({
24 owner: '<owner>',
25 repo: '<target-repo>',
26 workflow_id: '<workflow>.yml',
27 ref: 'main'
28 })

前述の記事ではサードパーティの tibdex/github-app-token が紹介されているが、現在では GitHub 公式の actions/create-github-app-token が利用できるため、こちらを採用している。

最後の actions/github-script では 1 つ前の step の outputs から token を取得し github-token として指定する。 API コール箇所で対象の repository と ref を指定する。workflow_id には、発火先の workflow ファイル名をそのまま指定すればよい。

参考

How to Trigger Subsequent GitHub Workflow in a Different Repository