Note

3年後の自分のために書いています

GitHub Apps を作る

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

大体以下の流れ。

  1. GitHub 上のイベント発生(PR を作る、ラベル追加など)
  2. Webhook URL として登録したエンドポイントにリクエストがくる
    • Subscribe してるイベント発生時のみ(アプリ作成時に設定する)
  3. Webhook リクエストの payload の中にいろんな情報(作成された PR、ラベル、それに紐づくリポジトリの情報など)が入ってるので、それを用いて GitHub API を叩く
  4. 作業が自動化できる :clap:

Note

  • 多分ちゃんと運用するとなったら本番用と開発用の二つの GitHub Apps を作って、権限設定など同じにして本番用の Webhook URL は Heroku などのデプロイ先、開発用は smee.io の URL にするのが良さそう
  • デプロイタイミングは作者の自由
  • 一度インストールしてもらえれば、途中でアイコンや description 変えても、何度デプロイしても、ユーザに通知が行くことはないが、permission 変えた時だけ変更リクエストがいき、ユーザの許可を求められる(そしてユーザが許可したかどうかは作者からは分からない)

References