😎

GitHub Actionsでイシュー作成時に自動でorganizationのプロジェクト(V2)を紐づける

2024/06/17に公開

はじめに

GitHub では、.github/ISSUE_TEMPLATE にマークダウンファイルあるいは yaml ファイルを用意すると、イシュー作成時に記載項目をテンプレート化することができます。タイトル・内容はもちろん、担当者やラベル、プロジェクトの紐付けも可能です。

しかし、殊プロジェクトに関して、リポジトリのプロジェクトであればマークダウンファイルの記述で紐づけることができるのですが、organization のプロジェクトを紐づけることはできません。

そこで、GitHub Actions を使ってイシュー作成時に自動でプロジェクトが紐づけられるようにします。

方法

一応テンプレートファイルもお見せしますが、以下の方法ではすべてのイシュー作成時にプロジェクトがリンクされるようになるので、特にテンプレートファイルが必要でない人は、テンプレートファイルの項は読み飛ばしてください。

テンプレートファイル

API 作成のためのテンプレートを以下のように作成しています。

.github/ISSUE_TEMPLATE/api.md
---
name: Implement APIs
about: Implement API methods
title: '/v1/~ の(メソッド名)メソッドの作成'
labels: 'API :dizzy:,feature :zap:'
assignees: ''
---

## 説明

<!-- このIssueの目的や背景について記載 -->

## エンドポイント

<!-- エンドポイントを記載 -->

`/v1/~`

## メソッド

<!-- 該当するメソッドにチェック -->

- [ ] GET
- [ ] POST
- [ ] PUT
- [ ] DELETE
- [ ] PATCH

## パラメータ

| 名前 | 説明 |||
| ---- | ---- | --- | --- |
|      |      |     |     |
|      |      |     |     |
|      |      |     |     |

## Body

| 名前 | 説明 |||
| ---- | ---- | --- | --- |
|      |      |     |     |
|      |      |     |     |
|      |      |     |     |

## ヘッダー

| 名前 | 説明 |||
| ---- | ---- | --- | --- |
|      |      |     |     |
|      |      |     |     |
|      |      |     |     |

## 参考文献

<!-- 参考文献があれば記載 -->

## その他

<!-- その他の情報やメモを記載 -->

もしプロジェクトが同じリポジトリ内にあれば、

---
name: Implement APIs
about: Implement API methods
title: '/v1/~ の(メソッド名)メソッドの作成'
labels: 'API :dizzy:,feature :zap:'
assignees: ''
projects: (リポジトリ名)/(プロジェクト番号)
---

とすれば、自動で紐づけられますが、organization のプロジェクトだとうまくいきません。

GitHub Actions を使う

この自動化はいくつか方法はありますが、今回は GitHub Actions を使って自動化します。GitHub Actions では、.github/workflows の中に yaml ファイルを用意することで、様々な動作をトリガーにワークフローを作ることができます。そのためのリポジトリが用意されていて、今回使うのは、https://github.com/actions/add-to-project です。

.github/workflows/auto-add-to-project.yaml
name: Auto Add to Project V2

on:
  issues:
    types: [opened]

jobs:
  add_to_project:
    runs-on: ubuntu-latest
    steps:
      - name: Add issue to project
        uses: actions/add-to-project@v1.0.1
        with:
          project-url: 'https://github.com/orgs/{organizationId}/projects/{projectId}'
          github-token: ${{ secrets.AUTO_ADD_TO_PROJECT_TOKEN }}

それぞれ説明をすると、

on:
  issues:
    types: [opened]

イシューが作成された時をトリガーにします。

uses: actions/add-to-project@v1.0.1

上記リポジトリを指定します。

with:
  project-url: 'https://github.com/orgs/{organizationId}/projects/{projectId}'
  github-token: ${{ secrets.AUTO_ADD_TO_PROJECT_TOKEN }}

organization のプロジェクトの URL を指定します。

そしてトークンは、以下の手順で発行し環境変数を定義します。

  1. https://github.com/settings/tokens/new にアクセスし、repoprojectにチェックを入れ作成する。
  2. 作成されたトークンをメモる。一度完了すると再度取得することはできないので注意。
  3. https://github.com/organizations/{organicationId}/settings/secrets/actions で"New organization secret"を押し、新たに環境変数を作成。その環境変数名を上記 yaml ファイルで指定する(上の例では、AUTO_ADD_TO_PROJECT_TOKEN)。

あとはデフォルトブランチにデプロイすれば、イシュー作成時に自動でプロジェクトが紐づけられます。

注意点

GitHub Actions を使うので、おおよそ 10 秒から 20 秒ほどは紐付けまでに時間がかかるのと、その分だけ GitHub Actions の月の容量を消費します。GitHub のプランや組織の規模によって判断する必要があります。

プラスクラス・スポーツ・インキュベーション株式会社

Discussion