Conclusion
Probot 使えばけっこう簡単にできる。
Motivation
project-bot という Issue/PR 作成時などに GitHub Projects にカード追加してくれる GitHub Apps があるが、ラベル追加時の挙動が微妙(すでにあるカードを移動してくれるのみ)で 機能追加の Issue も立ってる のだけど、1 年ほど開発が止まってるので、自分で作ろうと思った。
作ったやつ
App page: https://github.com/apps/pj-card-bot
What is Probot?
GitHub Apps を作るためのフレームワーク。 TypeScript または JavaScript で開発することが可能で、Webhook 受信や GitHub API 実行を簡単に利用できる仕組みを提供している。
内部的には express を使ってるっぽくて、probot を利用してWebhook イベントに対応するための API サーバを構築するような感じ。
:memo: Memo
最初に作られるテンプレは create-probot-app/templates にある。
開発環境では Webhook リクエストを受け取るのに smee.io を推奨されるけど、ngrok 使っても動くと思う。どっちもローカルホストの Web サーバを外部に公開するための proxy 機能を提供してくれるやつ。
二段階認証してると app.yml を用いた manifest flow が上手く動かないっぽい ので、permission や subscribe するイベント周りの設定は手動でする必要あり。
see. https://probot.github.io/docs/development/#manually-configuring-a-github-app
Basic of GitHub Apps
大体以下の流れ。
- GitHub 上のイベント発生(PR を作る、ラベル追加など)
- Webhook URL として登録したエンドポイントにリクエストがくる
- Subscribe してるイベント発生時のみ(アプリ作成時に設定する)
- Webhook リクエストの payload の中にいろんな情報(作成された PR、ラベル、それに紐づくリポジトリの情報など)が入ってるので、それを用いて GitHub API を叩く
- ここで叩ける GitHub API も事前にアプリ作成時に設定された permission の範囲内になる
- 作業が自動化できる :clap:
Note
- 多分ちゃんと運用するとなったら本番用と開発用の二つの GitHub Apps を作って、権限設定など同じにして本番用の Webhook URL は Heroku などのデプロイ先、開発用は smee.io の URL にするのが良さそう
- デプロイタイミングは作者の自由
- 一度インストールしてもらえれば、途中でアイコンや description 変えても、何度デプロイしても、ユーザに通知が行くことはないが、permission 変えた時だけ変更リクエストがいき、ユーザの許可を求められる(そしてユーザが許可したかどうかは作者からは分からない)