GitHub ActionでGitHub Organization内にあるプライベートリポジトリのReleaseを取得する
はじめに
GitHub Organizationで管理しているプライベートリポジトリのアプリケーションがあり、これをReleaseページを使って別リポジトリのGitHub Action内で使えるようにするための手順をまとめます。
GitHub Appの作成
GitHub Appの作り方は以下のドキュメントに倣ってください。
Repository PermissionsでReleaseページからダウンロードするための権限を有効化します。
ContentsをRead-onlyに設定してください。(自動的にMetadataもRead-onlyになります)
private keyの作成
作成したGitHub Appのページから、Generate a private keyをクリックしてprivate keyを作成します。
Install GitHub App
作成したGitHub Appをリポジトリにインストールします。
Only select repositoriesを選択し、ダウンロード対象のリポジトリと、ダウンロードするリポジトリの2つを選択します。
Repository secrets
作成したGitHub AppのページにあるApp IDと、ダウンロードしたprivate keyを使って、以下2つのRepository secretを設定します。
APP_ID
APP_PRIVATE_KEY
GitHub Action
.github/workflows
に任意の名前のWorkflowファイルを追加し、以下のようにGitHub Appsによるトークンの発行・Releaseページからのダウンロードします。
actions/create-github-app-token
のowner
とrepositories
を設定しないと、Releaseページからダウンロードできる権限があるトークンが発行されないのでご注意ください。
Releaseページからのダウンロードはhttps://github.com/dsaltares/fetch-gh-release-assetを利用しています。
name: do something
on:
pull_request:
types:
- opened
- synchronize
jobs:
do-something:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Generate a token
id: generate_token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.APP_ID }}
private-key: ${{ secrets.APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: "something-a,something-b" # ダウンロード対象のリポジトリ、ダウンロードを行うリポジトリを入力する必要があります
- name: Download latest binary
uses: dsaltares/fetch-gh-release-asset@1.1.1
with:
repo: org/repo # 任意の組織/リポジトリ名
version: latest
file: something_Linux_x86_64.tar.gz # ダウンロードするファイル名
token: ${{ steps.generate_token.outputs.token }}
- name: Extract file
run: tar -xvf something_Linux_x86_64.tar.gz
Discussion