はじめに
GitHub ActionsでGitHub Appsを使うときには登録時に入手できるApp IDとsecret keyから一時的に使用できるトークンを発行する必要があります。
このトークンはGitHubが用意しているRest APIやGraphQL APIに対してリクエストすることによって入手することができます*1が、いちいちAPIを叩く準備をするのは面倒なので個人が作成したActionであるtibdex/github-app-tokenやSentryが提供しているActionであるgetsentry/action-github-app-tokenを使うことによって楽をすることができました。
今まで非公式なActionに依存していたトークン生成ですが、GitHubが公式でAppsトークンを作成するActionであるactions/create-github-app-tokenを提供するようになったので公式のActionへ依存先を切り替えられるようになりました。 実際、GitHubのドキュメントでは今までtibdex/github-app-tokenを使う手順が紹介されていましたが、actions/create-github-app-tokenを使うように変更*2されています。
しかし乗り換えるにあたって注意事項がいくつかあったので紹介します。
今回はGitHub Appsが何かについてはスコープ外とします。以下の記事で詳しく説明されているので参考にしてみてください。
注意事項
1. Optionalな引数を追加で渡さないと、WorkFlowが動いているリポジトリの外にアクセスできない
# https://github.com/actions/create-github-app-token#create-a-token-for-the-current-repository steps: - uses: actions/create-github-app-token@v1 id: app-token with: app-id: ${{ vars.APP_ID }} private-key: ${{ secrets.PRIVATE_KEY }}
READMEには上のような例が記載されています。この例には "Create a token for the current repository"というタイトルがついている通りWorkFlowが動いているリポジトリのみにアクセスできるトークンが発行されます。
tibdex/github-app-tokenはデフォルトではGitHub Appsがアクセスできるすべてのリポジトリ*3にアクセスすることができます。またgetsentry/action-github-app-tokenはアクセスできるRepositoryを制限できず、すべてのリポジトリにアクセスできるトークンのみが発行できます。
Git Submodulesを使用しているなどの場合はOptionalな引数であるrepositoriesを指定する必要があるので注意が必要です。
トークンがアクセスできるリポジトリを絞りやすくなって良いですね。
2. 必須引数が既存のActionそのままだとdeprecated
tibdex/github-app-tokenやgetsentry/action-github-app-tokenは必須パラメータであるAppIDとPrivateKeyをそれぞれキーをapp_id
とprivate_key
として指定します。
# https://github.com/getsentry/action-github-app-token#usage - name: my-app-install token id: my-app uses: getsentry/action-github-app-token@v2 with: app_id: ${{ secrets.APP_ID }} private_key: ${{ secrets.APP_PRIVATE_KEY }}
しかしactions/create-github-app-tokenではスネークケースで指定するapp_id
, private_key
はdeprecated扱いとなっていて、かわりにケバブケースでapp-id
, private-key
と表記することを求められています。
使えはしますが、いちいちWarningが出るのも面倒なので直しておきましょう。
まとめ
GitHub AppsをGitHub Actionsで使うツールをActions公式が新しく出してきたので乗り換えるときの注意点をまとめました。
GitHubのドキュメントでも紹介されているActionなので、GitHub AppsをGitHub Actionsで使っている人はぜひ移行を検討してみてください。
*1:https://docs.github.com/en/apps/creating-github-apps/authenticating-with-a-github-app/authenticating-as-a-github-app-installation
*2:変更があったコミット https://github.com/github/docs/commit/a07fc6cf5f74b3f843319aa6a504db193fc379d7
*3:Appsのインストール時にすべてのリポジトリにアクセスできるようにしたのであれば文字通りすべてのリポジトリにアクセスできるようになる。特定のリポジトリを選択してインストールした場合は、その特定のリポジトリすべてにアクセスできるようになる。