🙆

真・Bitrise向けのGitHub Personal Access Tokensを駆逐する

に公開

前略

fg-PAT駆逐の際にお世話になりました。

https://qiita.com/n_komiya/items/e196236f35a4595a84e5

これで満足していいのか?

しかし、上記の記事では最終的に自身が作成したGitHub AppのPrivate KeyをBitriseのSecretsに保存している。本当にそれでいいのか?より危険な状態になってしまっていないか?という疑問を抱いた読者諸賢も多いだろう。私もそうである。

2025年現在、Bitriseは独自のGitHub Appを導入可能になっている。今、fg-PATを駆逐したいと願っている人がいるならば、 Bitriseの GitHub Appを利用するべきだろう。

BitriseのGitHub Appを導入する

https://devcenter.bitrise.io/en/connectivity/github-app-integration.html

こちらのドキュメントで紹介されているステップに従えばBitriseのGitHub Appをインストールし、既存のBitrise Projectに組み込むことができる。

BitriseのGitHub Appはデフォルトで contents: read が付与されているが、追加のパーミッションをリクエストすることができる。追加できるパーミッションは以下である。

  • metadata: read
  • issues: read
  • checks: write
  • contents: write
  • commit-statuses: write
  • pull-requests: write

これらのパーミッションで解決できる処理であれば、BitriseのGitHub Appから発行されたInstallation Tokenを利用すれば対応できる。例えば DangerでCommit StatusやChecksを変更したいケースにも対応できるので、独自のGitHub Appの秘密情報をBitrise上に保存する必要はないのだ。

BitriseのGitHub Appから発行されたInstallation Tokenを利用する

Bitriseのドキュメント上でInstallation Tokenにアクセスする方法は明示されていないが、環境変数 GIT_HTTP_PASSWORD に格納されている。

BitriseのGitHub Appから発行されたInstallation Tokenを利用して gh コマンドからGitHub Releasesを作成するStepの例を以下に示す。

workflows:
    create-release:
        steps:
        - script:
            inputs:
            - content: |-
                #!/usr/bin/env bash
                set -ex
                # BitriseのGitHub Appを利用して認証を行っていると、 `GIT_HTTP_PASSWORD` にInstallation Tokenがセットされる
                echo $GIT_HTTP_PASSWORD | gh auth login --with-token

                gh release create v1.2.3 --generate-notes 

簡単! gh コマンドを利用しない場合にも、netrc経由で認証を行うことができる。

workflows:
    example:
        steps:
        - https://github.com/bitrise-io/bitrise-steplib.git::authenticate-host-with-netrc@0:
            inputs:
            - host: github.com
            - username: username # usernameは適当で良い
            - password: "$GIT_HTTP_PASSWORD"

まとめ

BitriseのGitHub Appを利用することで、自身が作成したGitHub Appの秘密情報をBitriseにホストすることなく、GitHubのリソースにアクセスすることができる。Step内で環境変数を通じてInstallation Tokenにアクセスできるので gh コマンドを利用しているケースなどでは対応できる可能性が高いだろう。

補足

注意点として、Bitrise WorkspaceとBitrise GitHub Appの関係は1:1だ。1つのBitrise GitHub Appを複数のBitrise Workspaceと紐づけることはできない。

Discussion