GitHub Projects の Issue のカードを、関連する PR をもとに更新する Actions を作った
背景
GitHub Projects で Issue と Pull request とを管理するとする。 片方だけを登録して管理すると、もう片方の状態変化時に Projects に自動反映されない。 一方、両方登録すると冗長になってしまう、という類のリポジトリがある。
そこで、Issue を参照する PR の状態変化時に、Project 上にある Issue のカードの状態を自動更新する GitHub Actions を作った 1。
Marketplace: https://github.com/marketplace/actions/github-project-connect-action
Repository: https://github.com/wktk/github-project-connect-action
動作
下記の流れで処理している。
- pull_request のイベントで起動
- Pull request のタイトル・本文に
fix #123
close #123
形式 2 の Issue の参照がないか探す - 参照があった場合、対象 Project に参照先の Issue がカードとして登録されていないか探す
- カードがあった場合、指定したカラムに移動する
設定
次のような形式で設定する。
name: github-project-connect-action
on:
pull_request:
types: [review_requested, closed]
pull_request_review:
types: [submitted]
jobs:
connect:
runs-on: ubuntu-latest
steps:
- name: When pull_request is review_requested, move the connected issue to the Reviewing column
if: github.event_name == 'pull_request' && github.event.action == 'review_requested'
uses: wktk/github-project-connect-action@v1
with:
github-token: ${{ secrets.REPO_TOKEN }}
column-url: https://github.com/users/wktk/projects/1#column-8564172
URL か ID 指定を使って対象 Project やカードの移動先カラムを指定する。 GitHub Actions が自動でセットしてくれるトークンは GitHub Projects の API には使えないので、 別途 Personal Access Token を取得して設定する必要がある。
発動条件の判定は、GitHub Actions の if
の文法を使って設定する。もし if
だけで表現できなければ、
前段のステップに条件判定を別途実装して、前段の出力をもとに制御することを想定している。
あえて action 内に条件判定を実装しないことで、「1 つのことをうまくやる」action にしたかったのと、
設定の自由度・柔軟性を損なわないようにする意図がある。
おわりに
自分の使うパターンしかテストしていないので、不具合がある可能性は十分ある。 万一使ってみたという人がいれば、気づいたことがあるときはぜひフィードバックを頂けるとありがたい。
- Waffle.io という kanban サービスがこれをうまくやっていたのだが、2019 年 5 月にサービス終了してしまった。↩
- Linking keywords のほかに、Waffle.io で使われていた
connect #123
(connects
,connect to
,connects to
) の形式にも対応している↩