actions/create-github-app-tokenでインストールアクセストークンを発行しほかのリポジトリを操作する
2023年10月8日追記
actions/create-github-app-token v1.3.0以降では、ワークフローから別のリポジトリを操作できるようになったため、この記事の内容を修正している。
この記事では、GitHubが提供するactions/create-github-app-tokenを使って、GitHub Appのインストールアクセストークン(以降、GitHub Appトークン)を発行し、プライベートリポジトリをクローンする方法を説明する。
GitHub App トークンを生成する方法
GitHub ActionsでGitHub Appトークンを生成するには次の2つの方法がある。
- actionを利用する
- GitHub Appトークンを取得する処理を自前で実装する
GitHub Appトークンを生成できるactionのひとつに、actions/create-github-app-tokenがある。
このactionはGitHubが提供している。
リポジトリを操作するトークンを扱うためactionの利用には慎重にならざるを得ないが、GitHubが公式に出しているactionsであればサードパーティ製のactionより安心して利用できる。
動作を確認したパージョン
actions/create-github-app-token v1.5.0
GitHub App のセットアップ
最初に、GitHub Appをセットアップする。
セットアップでは以下の作業を実施する。
- GitHub Appを作成し、GitHub Appで生成するトークンの権限を設定する
- 秘密鍵を発行する
- 次のリポジトリにGitHub Appをインストールする
- ワークフローを実行するリポジトリ
- cloneするプライベートリポジトリ
- ワークフローを実行するリポジトリに、GitHub AppのIDと秘密鍵を登録する
これらの手順の詳細は、過去に書いた記事を参照してほしい。
GitHub App インストールアクセストークンを使って GitHub Actions を実行する:GitHub App のセットアップ
ワークフロー
次の内容で、ワークフローファイルを追加する。
プライベートリポジトリをcloneするには、cloneするリポジトリのオーナー(ユーザー名または組織名)をowner
に指定する必要がある。
次のワークフローでは、ワークフローを実行するリポジトリと、cloneするリポジトリが同じオーナーと仮定し、owner
にはgithub.repository_owner
を指定している。
name: Clone a private repository
on: workflow_dispatch
jobs:
clone:
runs-on: ubuntu-latest
timeout-minutes: 5
env:
OWNER: ${{ github.repository_owner }}
steps:
- name: Generate GitHub App Token
id: app_token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.PRIVATE_KEY }}
owner: ${{ env.OWNER }} # 操作したいリポジトリのオーナーを指定する
- name: Clone private repository
env:
GH_TOKEN: ${{ steps.app_token.outputs.token }}
run: |
# クローンするプライベートリポジトリ名に応じて <REPO_NAME> を書き換える
git clone https://x-access-token:"$GITHUB_TOKEN"@github.com/${{ env.OWNER }}/<REPO_NAME>.git
ls -la
動作確認
ワークフローのトリガーにworkflow_dispatch
を指定しているため、手動でワークフローを実行する。
実行すると、無事にプライベートリポジトリをcloneできていることを確認できる。