Githubで、ビルドは別のリポジトリで実施するが、リリース作業などは別リポジトリで実施したいことがあります。
また、カレントリポジトリにある添付ファイルと別リポジトリーにある添付ファイルをS3にアップロードしたいこともあるかもしれないです。
その場合、デフォルトであるGITHUB_TOKENの権限では、別リポジトリーを操作することが出来ません。
personal access tokensを使う方法もあるのですが、条件などあるため使えないことも多いです。
そこで、GithubAppを使用して、見解を取得する方法を記載します。
Github Appの作成
- 下記にアクセスして、New Github Appをクリックします。
https://github.com/settings/apps/
https://github.com/organizations/<組織>/settings/apps
- 名前やURLなどは適当に入れてもらっていいです。
- WebhookのActiveは、チェックを外します。
- Repository permissionsのContentsのアクセスをRead以上にします。
- Create Github Appをクリックします。
インストール
作成したら、Generate a private keyをクリックして、keyを保存してください。
private keyとApp IDを使用します。
-
Install Appでインストールします。
-
インストールするとリポジトリを選択できますので、ファイル操作を許可したいリポジトリを選択します。
-
操作したいリポジトリのsecretsにAPP_IDとPRIVATE_KEYを登録します。
-
PRIVATE_KEYは、-----BEGIN RSA PRIVATE KEY-----と-----END RSA PRIVATE KEY-----を含めて、登録します。
GithubActions
name: Github App
on:
workflow_dispatch:
inputs:
tag:
required: true
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
ref: main
- name: Generate github token
id: generate_token
uses: tibdex/github-app-token@v2
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
- name: Get Release data
id: release_data
uses: robinraju/release-downloader@v1.8
with:
repository: 操作したいリポジトリ
tag: ${{ github.event.inputs.tag }}
token: ${{ steps.generate_token.outputs.token }}
fileName: '*'
- name: Check LS
run: |
ls -la
説明
- 下記で、github app tokenを使用できるようにします。
- steps.generate_token.outputs.tokenに権限があるトークンが登録されます。
- name: Generate github token
id: generate_token
uses: tibdex/github-app-token@v2
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
- 例で、別リポジトリのタグに添付してるファイルを取得します。
- repositoryに操作したいリポジトリを指定します。
- tokenには、GithubAppで設定した権限を取得できるようにsteps.generate_token.outputs.tokenを指定します。
- name: Get Release data
id: release_data
uses: robinraju/release-downloader@v1.8
with:
repository: 操作したいリポジトリ
tag: ${{ github.event.inputs.tag }}
token: ${{ steps.generate_token.outputs.token }}
fileName: '*'
あまり需要がないのか情報がなかったのですが、別リポジトリを操作する方法になります。
例で、ファイルの操作をしていますが、PRや別のWorkflowを操作するなどGithubAppで権限を与えれば、色々操作出来ます。