wktk's blog

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 にしたかったのと、 設定の自由度・柔軟性を損なわないようにする意図がある。

おわりに

自分の使うパターンしかテストしていないので、不具合がある可能性は十分ある。 万一使ってみたという人がいれば、気づいたことがあるときはぜひフィードバックを頂けるとありがたい。


  1. Waffle.io という kanban サービスがこれをうまくやっていたのだが、2019 年 5 月にサービス終了してしまった。
  2. Linking keywords のほかに、Waffle.io で使われていた connect #123 (connects, connect to, connects to) の形式にも対応している

Author

@wk

Tags