Closed9
GitHub ActionsでPATからGitHub App トークンを使うように切り替える
モチベーション
- いくつかのGitHub ActionsでデフォルトのGITHUB_SECRETではないPATを使用している
- tag打ちのactionsからgoreleaserのactionsをtriggerするため
- PR自動作成させた際にtest系のactionsをtriggerするため
- goreleaserを動かすときにhomebrew用のリポジトリを更新するため
- それぞれの用途 × リポジトリごとにFine-grained personal access tokens を発行してるが管理や更新がめんどい
- GitHub App トークンを使う形でこれらの手間をなくしたい
ref
actionsは公式のこれを使う
ググった感じ多くの例でこっちの3rd partyのactionsが使われてる。
けどこのissueを見る感じ、3rd party側特有の機能に依存がなければ公式を使っておけば良さそう
ほぼこの手順に則ってGitHub App作成
Permissionは今払い出しているtokenに合わせて
- Contents: RW
- Pull requests: RW
- Metadata: RO
private keyを生成してDL.
App IDとClient IDは後続の作業で使うっぽいが、設定のGeneralからいつでも確認できそう
アカウントへインストール
Only select repositoriesで対象のリポジトリを選ぶ。
個人アカウントへのインストールなので、自分のユーザ配下のリポジトリしか出てこない。
業務で所属してるorganizationのリポジトリは出てこない。
一回設定したあとは、Integration -> Applicationから設定変更できそう
SecretにApp IDとprivate keyを登録して、actionsから参照できるようにする。
複数のrepoで使いたいけど、個人アカウントだとorg secret的なものはなさそう。なので諦めて一個一個に登録する
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"
secret.APP_ID
-> secrets.APP_ID
無事動いた。
発行されるtokenのpermissionが最初にAppを作った時の権限の強さになる。
カリカリにやるなら用途ごとにAppを作るのが正しそうだけど、個人利用ならまあいいかな。
このスクラップは5ヶ月前にクローズされました