はじめに
こんにちは今回は GitHub の PR のレビューリクエストを Slack に通知するツールを作ったので紹介です。
(2022年5月21日 18:00 JST 現在の状況です)
以下のやり取りはフィクションです
???「え、それ GitHub で提供してるよ?」
僕「うん知ってるよ。これだよね。」
???「それそれ、なんで作ったの」
僕「よく読んで。」
GitHubは、オーナーごとに5つのリポジトリまで、リポジトリごとに20のPull Requestまでしかリマインダーをトリガーしません。
???「5つのリポジトリ...リポジトリごとに20のPull Requestまで」
僕「5つのリポジトリ...リポジトリごとに20のPull Requestまで」
こんな制限がありました。
どうしてなのかはわかりかねますがその制限つらいのでもちろん制限はありつつもいい感じにフォローしてくれるようなツールにしました。
ツール
作ったモチベーションは、たまたまこの制限にぶち当たる案件にぶち当たったからですね。あとはシンプルに久しぶりに他の開発をしたいなというやつです。
必要環境
- Python 3.10
(これは普通に近いうちにちゃんと Python 3.7 対応まで下げる)
v0.3.1 で修正済み (2022年5月21日 19:00 JST 追記)
インストール
$ pip install gs-reminder
使用方法
環境変数に以下を設定する
GITHUB_TOKEN
SLACK_URL
秘匿情報なのでコマンドラインに打ち込むと履歴に残っちゃうし、 gh
コマンドとかも GITHUB_TOKEN
を環境変数で読み込む方式だったかと思うので真似をさせていただきました。
GITHUB_TOKEN
のスコープは以下のように repo
を選択しておけば問題ないかと思います。
SLACK_URL
は以下の方法が参考になるかと思います。
トークン方式はどうやるんだっけ〜ってなってるので思い出したら実装します。
オプション
--repo
or-r
--file-username
or-u
--limit
or-l
--limit
以外は必須です。
--repo
は PR を参照するリポジトリ名です org/repo
のような感じで指定します。
このリポジトリだったら nnsnodnb/github-pr-slack-reminder
ですね。
--file-username
は GitHub のユーザ名と Slack のユーザ名を紐付けるための JSON ファイルを指定するためのものです。
この記事を書いてて思ったけどこれ別に必須じゃなくてもよかった。
v0.3.1 で修正済み (2022年5月21日 19:00 JST 追記)
私の GitHub のユーザ名は nnsnodnb
です。 Slack のユーザ名は hiyakashi.koizumi
としましょう。 表示名とユーザ名が違うことが注意点ですね。
[ { "github": "nnsnodnb", "slack": "hiyakashi.koizumi" } ]
というような配列の JSON を定義して参照できる範囲に配置しておきます。
--limit
こちらは言わずもがな。 PR の参照数です。
上限は Slack の Block Kit の制限があり20件という制限を設けていますが PR の数がここで指定した数より多い場合は
のように表示されるようにしました。
例
$ gs_reminder --repo SeleniumHQ/selenium -u username.json -l 10
いい感じなリポジトリが見つからなかったので selenium のリポジトリをお借りしました
(19件以上送ろうとすると失敗したので多分 block が多いんだと思うんだ...)
不具合について
前章の最後でも書いたけど block が多いと送られない Slack Block Kit の制限をいい感じに突破する打開策。
シンプルな解決策でもいいけどそれでやろうかな。
最後に
頑張って改善していくぞ