Github Appを使って別リポジトリのワークフローを実行するための一時的なPATを発行する
こんばんは、情報システム室の夏目です。
先日、Github Actionsにおいて別リポジトリのワークフローを実行するための方法についてまとめました。
実行のためにはPersonal Access Token (PAT)が必要になります。
今回はGithub Appを使って一時的なPATをGithub Actions内で作成する方法について試してみました。
1. Github Appを作成する
https://github.com にアクセスします。

右上の自分のアイコンをクリックします。

Settings をクリックします。

下までスクロールして、 Developer settings をクリックします。


New Github App をクリックします。

Github App name と Homepage URL を入力します。
ここでは次のように入力します。
Github App name:Workflow Dispatch Token (sinofseven)Homepage URL:https://github.com/sinofseven
Expire user authorization tokens の設定は必要ないのでチェックを外します。
下にスクロールします。

Webhook を使用しないので Active のチェックボックスを外します。
今回は workflow_dispatch を使用するので次の権限を設定します。
Repository permissions -> Actions:Read and write
更に下にスクロールします。

Where can this GitHub App be installed? で作成するGithub Appをインストールできる対象を指定します。
今回は Only on this account を選択し、自分のアカウントだけがインストールできるようにします。
Create Github App をクリックします。

これでGithub Appの作成ができました。
Where can this GitHub App be installed? - Only on this account
今回の設定ではリポジトリのオーナーが自分 (sinofseven )であるリポジトリにのみGithub Appをインストールできます。
では、別のOrganizationのリポジトリには Any account を選択して任意のアカウントでインストール可能にする必要があるのか。
そんなことはありません。
今回はGithub Accountの Developer Settings でGithub Appを作成しましたが、Organizationの Developer Settings でGithub Appを作成すれば良いです。
その場合は作成した Only on this account を選択すると、Organizationのリポジトリにインストール可能になります。

(luciferous-laboratory というOrganizationでGithub Appを作成しようとしているときの画像)
2. Github AppでPrivate Keyを発行する
作成したGithub Appの(設定)画面を下にスクロールします。


Private keys -> Generate a private key の下にある Generate a private key のボタンをクリックします。

Private keyが作成され、pemファイルでダウンロードされます。
3. Github Appをリポジトリにインストールする
作成したGithub Appをリポジトリにインストールします。

画面左の Install App をクリックします。

install のボタンをクリックします。

All repositories を選択するとアカウントがオーナーになっているリポジトリすべてにインストールされます。
今回はインストールするリポジトリを選択する Only select repositories を選択し、 target-repository を選択します。

Install をクリックします。

インストールができました。
target-repository に設定しているワークフロー
on:
workflow_dispatch:
jobs:
job:
runs-on: ubuntu-24.04
steps:
- run: echo "Call"
実行ができたことを確認するだけなので Call と出力するだけのワークフローです。
4. 別のリポジトリのワークフローから実行する
今回は sinofseven/dispatch-repository というリポジトリから実行します。
4-1. 必要な値をSecretsに登録する
まず最初にGithub AppのClient IDとPrivate KeyをSecretsに登録します。
(Client IDはGithub Appの設定画面に記載されています)
(Private Keyはダウンロードされたpemファイルの中身の文字列をそのまま登録します)

ここでは APP_CLIENT_ID と APP_PRIVATE_KEY という名前で登録しました。
4-2. 別リポジトリのワークフローを実行するワークフローを作成する
on:
workflow_dispatch:
jobs:
call:
runs-on: ubuntu-24.04
steps:
- name: Request PAT
id: request-pat
uses: actions/create-github-app-token@v3
with:
client-id: ${{ secrets.APP_CLIENT_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: sinofseven
repositories: target-repository
- name: Call Workflow
uses: actions/github-script@v7
with:
github-token: ${{ steps.request-pat.outputs.token }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: "sinofseven",
repo: "target-repository",
workflow_id: "flow.yml",
ref: "master"
})
Github Actionsでは actions/create-github-app-token というアクションを使ってPATを生成できます。
ここで生成したPATはデフォルトで1時間のみ有効です。
特定のリポジトリに対するPATを生成する場合は owner と repositories を指定します。
このActionの結果としてPAT (installation token) が outputs.token に出力されます。
後続のステップで使用するために、Actionを実行するステップで id: request-pat と名前を付けて steps.request-pat.outputs.token という名前でアクセスします。
4-3. 実行する
作成したワークフローを実行すると次のようになりました。

正常に別のリポジトリのワークフロー起動ができていることがわかります。
別リポジトリのワークフローを確認すると、きちんと起動されていることがわかります。


まとめ
以上、Github Appを使ってGithub Actionsの中で一時的なPATを取得する話でした。
何かのお役に立てたら幸いです。




