actions/create-github-app-token でほかのリポジトリを操作できなかった話
TL;DR
- actions/create-github-app-token の v1.2.1 時点では、生成された GitHub App のインストールアクセストークンで別のリポジトリを操作できない
- GitHub Actions から別のプライベートリポジトリを clone するという操作が不可能
- ほかのリポジトリを操作できるインストールアクセストークンを生成するには、これまで通り自前で実装するかサードパーティの action を利用する必要がある
- 別のリポジトリを操作したいという Issue が登録されているので、対応されるのを待ちたい
背景
GitHub Actions で インストールアクセストークン(以降、GitHub App トークン)を生成するには次の 2 つの方法をとる必要があった。
- サードパーティの action を利用する
- GitHub App トークンを取得する処理を自前で実装する
このブログでも、サードパーティの action を使って GitHub App トークンを利用する方法を記事にした。
そんな中、ついに GitHub が GitHub App トークンを生成する action を提供していることが、X(旧 Twitter)で話題になっていた。
早速、これまで使っていたサードパーティの action からこの action に置き換えてみたが、プライベートリポジトリを clone できなかった。
確認したバージョンとワークフローの内容
actions/create-github-app-token v1.2.1
以下のワークフローは動きません。
name: Clone a private repository
on: pull_request
jobs:
clone:
runs-on: ubuntu-latest
timeout-minutes: 5
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 }}
- name: Clone private repository
env:
GH_TOKEN: ${{ steps.app_token.outputs.token }}
run: |
# クローンするプライベートリポジトリ名に応じて <OWNER> と <REPO_NAME> を書き換える
gh repo clone https://github.com/<OWNER>/<REPO_NAME>
ls -la
原因
ソースコード を読んでみると、GitHub App トークンを生成する箇所の repositoryNames
の引数に、自分自身のリポジトリ名だけを渡していた。
// https://github.com/actions/create-github-app-token/blob/49ce228ea7cddec9f88dd09c5b7740dbac82d7ba/lib/main.js
// Get owner and reponname from GITHUB_REPOSITORY
const [owner, repo] = repository.split("/");
// ...省略...
const authentication = await auth({
type: "installation",
installationId: installation.id,
repositoryNames: [repo], // 自分自身のリポジトリ名だけを渡している
});
このため、操作対象のリポジトリに GitHub App をインストールしたとしても、ワークフローを動かすリポジトリのみに操作対象が絞られてしまう。
v1.2.1 時点では、action のオプションから操作できるリポジトリを渡せるようにはなっていない。
リポジトリの README にも、次のように記載されている。
The token is scoped to the current repository.
まとめ
この記事を執筆している時点で最新バージョンである v1.2.1 の actions/create-github-app-token では、生成した GitHub App トークンで操作できるのは自分のリポジトリのみである。
そのため、GitHub Actions からプライベートリポジトリを clone するなど、ほかのリポジトリを操作する場合には、自前で実装するかサードパーティの action を利用する必要がある。
ただ、別のリポジトリを操作したいという Issue が登録されているので、対応されることを期待している。