stefafafan の fa は3つです

"すてにゃん" こと id:stefafafan のブログです

GitHub App の権限で Songmu/tagpr を利用する

id:Songmu さんが作られた https://github.com/Songmu/tagpr を先ほど使ってみたのですがリリースフローがGitHub Actionsでまとまっているし、リリース内容がPull Requestにまとまってマージしたらいい感じにtag打ってくれるしでとても体験がよかったです。

ただし一点気になるとするならば、 リリース用のpull requestを自動作成し、マージされたら自動でタグを打つtagpr | おそらくはそれさえも平凡な日々 の記事や README には、GITHUB_TOKEN を活用する例や Personal Access Token を使う例はあっても、GitHub Appを作ってその権限を利用する方法は詳細には書かれていなかったのでメモとしてブログに書いておきます。

GitHub Appのトークンを返してくれる便利GitHub Actions

少し前まではGitHub Appのトークンを利用するための便利Actionsがサードパーティとしていくつか存在していて人々はこれを使ったり自作したりしていました。

これらは使えますが、いかんせん公式ではないので、セキュリティ面を気にしてGitHub Appのトークンを使いますというときに採用するのはちょっと緊張感はあるかもしれません。

そんな中最近公式が同等の機能を持ったActionsを出してくれました。

github.com

今後はこれ一択で使っていくと良いと思います。

actions/create-github-app-token の使い方

基本的にはREADMEにUsageがあるのでそちらをみてください。流れとしては以下のような感じです。

  1. GitHub App を作成する (権限は必要最低限に絞りましょう)
  2. Appを作る中でApp IDやPrivate Keyが取得できるので使うリポジトリのSecretsに登録しましょう
  3. GitHub App を対象のリポジトリに対してインストールしましょう

Songmu/tagpr と合わせて使う際は、設定後に tagpr のActionを動かしてみて、途中で権限不足っぽいエラーが発生したらGitHub Appの権限を見直して、インストールしたリポジトリ側で追加された権限を承認して再実行して調整するようにします。自分の場合はRelease Notesの生成のために Contents の権限が漏れていました。

実際のWorkflowの例

最終的にこういう設定になりました。ブランチ名やRepository Secretsの名前とかは設定次第で変わるかもしれませんが、基本的にどのリポジトリもこういうWorkflowを追加すると動くと思います。みなさんもお試しください。

name: Release with tagpr

on:
  push:
    branches: ["main"]

jobs:
  tagpr:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/create-github-app-token@v1
      id: app-token
      with:
        app-id: ${{ vars.APP_ID }}
        private-key: ${{ secrets.PRIVATE_KEY }}
    - uses: actions/checkout@v4
      with:
        token: ${{ steps.app-token.outputs.token }}
    - uses: Songmu/tagpr@v1
      env:
        GITHUB_TOKEN: ${{ steps.app-token.outputs.token }}

追記

Songmu/tagpr 本体で設定されている tagpr.yaml では tibdex/github-app-token が使われていることを後で発見したので、 actions/create-github-app-token を使いませんかとP-Rを出してみました。
github.com