というのを、そういえばこないだ作っていた。
意味わからんと思うので、Gifを見るほうがはやいはず。
- PRの本文に
Issue
という段落を作る - 段落内に
#1234
やhttps://github.com/<Org名>/<Repository名>/issues/1234
という記述形式でIssueや別PRを書く - PRがcloseされたりマージされたりしたら
- 書いておいたIssueやPRがプロジェクトの指定したカラムに自動で追加・移動される
というやつ。
リポジトリはここ。
ちなみにいまのバージョンでは GitHub自体のマージされたら自動でcloseされる fixed #1234
みたいなやつは除外するようにしている。プレフィックスキーワードがついてないIssue・PRのみ対象になる。
仕組み
PullRequestがマージされたりすると、GitHub Actionで得られる情報(Context)のなかに対象のPRのアレコレが入ったオブジェクトがある。
この中にbody
というプロパティがあり、ここにPRの本文が入っている。# Issue\n\n#1234\n\nhogefugapiyo\n\n# Summary\n\nsugoi pr desu
という形式で乱暴に入っている。なのでこれをひらすら正規表現でパースしてIssueナンバーorURLを抜き取ってガンバリでやっている。
- bodyから
Issue段落内に書かれた
Issue・PRの短縮記法|URLだけを取り出す - 各対象のナンバー
#1234
なら1234
、https://github.com/~~/999
なら999
を取り出す - GitHub APIを用いて、リポジトリ中の
2.
でとれたIssue/PRの内部IDを取ってくる(一緒にすでに配置してあるカンバン名やカードの内部IDもとる) - GitHub APIを用いて、configに書かれた対象のカンバンとカラムの内部IDを取ってくる
3.
で取った内部IDを元に4.
の情報とカードの情報を突合する- 対象カンバンの別カラムに既にあるカードは
move
、カード未作成のものはadd
の処理をGitHub APIを用いて行う
だいたいこういう具合。
めちゃくちゃ愚直だし、めちゃくちゃ地味。
所感
めちゃくちゃエッジニーズなActionのはずで、誰も彼もが使いてぇ〜〜〜ってなるやつじゃないと思っている。普通ならPRマージしたら該当のIssueはプレフィックスをつけておいて自動closeさせる、でOKだと思う。
なんでこんなものを作ったのかというと、closeしたあとに本当に正しく実装されているのかを確認する担当者がいて、そのチェックをパスしたらcloseするという運用をしたかったから。そのためにマージされたら、「このIssueに関するものが実装完了しましたよ」ということがわかる必要があり、それを一箇所に集めたいというニーズが生まれる。一箇所に集めさえすれば担当者は集まってきたものをさばくだけでOKという状態になれるので、そういうユースケースのためにこのアクションを作った。
こういう背景があるからおそらく汎用性はなくて、本当にエッジなアクションだと思っている。
正直OSSにしておくかどうか作っている最中もめちゃくちゃ悩んだのだけど、それでもまあもしかすると世界にはごくごく少数同じ気持ちの人間がいるかもしれないという気持ちになったので、一旦OSSにしておいた。
そういうわけなのでふとこういうことをやりたいなっていう気持ちになったら思い出してください、というスタンスでやっている。