[GitHub Actions] GitHub App による認証で新規 Issue を Organization の Project (Beta) に自動登録する

2023.01.31

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

リポジトリに Issue を新規作成した際に、Project (Beta) へ自動追加する設定がなく不便だったので、
GitHub Actions を使用して自動化する方法をご紹介します。

Organization で PAT が使用できない環境だったので、GitHub App によるアクセス許可を使用します。

GitHub App を作成する

GitHub App で認証/認可するために GitHub App を用意します。
GitHub App を作成するためには、アカウントの設定画面を開きます。

Organization のプロフィールから Settings を選択します。

GitHub App を作成する画面は Third-party Access ではなく、Developer settings のアコーディオンメニューに隠されています。

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

必須なので、適当な名前と URL を入力します。

Webhook は URL の入力が求められてしまうので、チェックを外しても構いません。

GitHub App にリポジトリとプロジェクトの権限を与える

Repository と Organization のカテゴリで権限の付与が必要です。

Repository permissions では Issues に Read-only 権限が必要です。
Repository permissions のほうの Projects はリポジトリに紐づくタイプの古いもの (classic) なので、使用しません。

Organization permission では Projects に Read and Write の権限を与えます。

Create GitHub App をクリックして App を作成します。

GitHub App の秘密鍵を作成する

GitHub App の設定から General に飛びます。

General の下部に Generate a private key という項目があるのでクリックして秘密鍵を作成します。
秘密鍵は作成した瞬間にダウンロードされるので、安全な場所に保管します。

GitHub App の App ID をコピーする

General タブで App ID をコピーしておきます。

GitHub App をインストールする

Install App からインストールできます。

アクセス許可を与えるリポジトリは必要に応じて変更してください。

リポジトリにワークフローで使用するシークレットを登録する

リポジトリの Settings → Secrets and variables → Actions から New repository secret を選択します。

以下のシークレットを登録します:

  • APP_ID: GitHub App の ID
  • APP_PRIVATE_KEY: ダウンロードした秘密鍵の中身をコピペ

新規 Issue を Project に自動追加するワークフローを作成する

.github/workflows/add-new-issue-to-project.yml

name: Auto add issue to project
on:
  issues:
    types:
      - opened
jobs:
  add-to-project:
    name: Add issue to project
    runs-on: ubuntu-latest
    steps:
      - name: Generate token
        id: generate_token
        uses: tibdex/github-app-token@v1.8.0
        with:
          app_id: ${{ secrets.APP_ID }}
          private_key: ${{ secrets.APP_PRIVATE_KEY }}
      - uses: actions/add-to-project@v0.4.0
        env:
          GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
        with:
          project-url: # GitHub Project の URL。https://github.com/orgs/organiation名/projects/1 など
          github-token: ${{ env.GITHUB_TOKEN }}

project-url の部分を Project の URL に書き換えてください。

試す

Issue を開くと、Bot が自動的に Project に Issue を追加します。

まとめ

GitHub Actions を使用して Project への登録を自動化しました。
Issue の自動登録はよく使いそうな機能ではあるので Actions を使わずにできるようになるともっと便利になると思いました。

また、Project (Beta) のアクセス権限が Organization permission 扱いになっており、GitHub App から個人の Project (Beta) を操作する方法が今のところないため、個人の場合は Personal Access Token (PAT) を使用する方法をお試しください。

参考