GitHub Actionsでイシュー作成時に自動でorganizationのプロジェクト(V2)を紐づける
はじめに
GitHub では、.github/ISSUE_TEMPLATE にマークダウンファイルあるいは yaml ファイルを用意すると、イシュー作成時に記載項目をテンプレート化することができます。タイトル・内容はもちろん、担当者やラベル、プロジェクトの紐付けも可能です。
しかし、殊プロジェクトに関して、リポジトリのプロジェクトであればマークダウンファイルの記述で紐づけることができるのですが、organization のプロジェクトを紐づけることはできません。
そこで、GitHub Actions を使ってイシュー作成時に自動でプロジェクトが紐づけられるようにします。
方法
一応テンプレートファイルもお見せしますが、以下の方法ではすべてのイシュー作成時にプロジェクトがリンクされるようになるので、特にテンプレートファイルが必要でない人は、テンプレートファイルの項は読み飛ばしてください。
テンプレートファイル
API 作成のためのテンプレートを以下のように作成しています。
---
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 です。
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 を指定します。
そしてトークンは、以下の手順で発行し環境変数を定義します。
-
https://github.com/settings/tokens/new にアクセスし、
repo
とproject
にチェックを入れ作成する。 - 作成されたトークンをメモる。一度完了すると再度取得することはできないので注意。
-
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