Closed9

GitHub ActionsでPATからGitHub App トークンを使うように切り替える

koh-shkoh-sh

モチベーション

  • いくつかのGitHub ActionsでデフォルトのGITHUB_SECRETではないPATを使用している
    • tag打ちのactionsからgoreleaserのactionsをtriggerするため
    • PR自動作成させた際にtest系のactionsをtriggerするため
    • goreleaserを動かすときにhomebrew用のリポジトリを更新するため
  • それぞれの用途 × リポジトリごとにFine-grained personal access tokens を発行してるが管理や更新がめんどい
  • GitHub App トークンを使う形でこれらの手間をなくしたい

例: https://github.com/koh-sh/codebuild-multirunner

koh-shkoh-sh

private keyを生成してDL.
App IDとClient IDは後続の作業で使うっぽいが、設定のGeneralからいつでも確認できそう

koh-shkoh-sh

アカウントへインストール
Only select repositoriesで対象のリポジトリを選ぶ。
個人アカウントへのインストールなので、自分のユーザ配下のリポジトリしか出てこない。
業務で所属してるorganizationのリポジトリは出てこない。

一回設定したあとは、Integration -> Applicationから設定変更できそう

koh-shkoh-sh

PATを参照してる箇所を修正

+     - name: Create GitHub App Token
+        uses: actions/create-github-app-token@v1
+        id: app-token
+        with:
+          app-id: ${{ secrets.APP_ID }}
+          private-key: ${{ secrets.PRIVATE_KEY }}

      - name: Push git tag
         run: |
           gh api \
             --method POST \
             -H "Accept: application/vnd.github+json" \
             -H "X-GitHub-Api-Version: 2022-11-28" \
             /repos/${{github.repository}}/git/refs \
             -f ref="refs/tags/${{inputs.tag}}" \
             -f sha="${{github.sha}}"
         env:
-           GITHUB_TOKEN: ${{ secrets.PAT4TAG }}
+           GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}

goreleaserで使ってる方は別リポジトリへ書き込みさせたいため、
repositories: "homebrew-tap"を指定する

      - name: Create GitHub App Token
         uses: actions/create-github-app-token@v1
         id: app-token
         with:
           app-id: ${{ secrets.APP_ID }}
           private-key: ${{ secrets.PRIVATE_KEY }}
           repositories: "homebrew-tap"

https://github.com/koh-sh/gha-timegraph/pull/24
※ typoあったのでPRから修正
secret.APP_ID -> secrets.APP_ID

koh-shkoh-sh

無事動いた。
発行されるtokenのpermissionが最初にAppを作った時の権限の強さになる。
カリカリにやるなら用途ごとにAppを作るのが正しそうだけど、個人利用ならまあいいかな。

このスクラップは5ヶ月前にクローズされました