LoginSignup
1
0

GithubActionsで別リポジトリを参照する

Posted at

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で権限を与えれば、色々操作出来ます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0