『入る学科間違えた高専生』の日記

プログラミングのコードを書いたりする予定です。あとは日記等。あといつまで高専生やねん

GitHub リポジトリの PR のレビューリクエストを Slack に通知してくれるツールを作った

はじめに

こんにちは今回は GitHub の PR のレビューリクエストを Slack に通知するツールを作ったので紹介です。

(2022年5月21日 18:00 JST 現在の状況です)


以下のやり取りはフィクションです

???「え、それ GitHub で提供してるよ?」
僕「うん知ってるよ。これだよね。」

docs.github.com

docs.github.com

???「それそれ、なんで作ったの」
僕「よく読んで。」

GitHubは、オーナーごとに5つのリポジトリまで、リポジトリごとに20のPull Requestまでしかリマインダーをトリガーしません。

???「5つのリポジトリ...リポジトリごとに20のPull Requestまで」
僕「5つのリポジトリ...リポジトリごとに20のPull Requestまで」


こんな制限がありました。
どうしてなのかはわかりかねますがその制限つらいのでもちろん制限はありつつもいい感じにフォローしてくれるようなツールにしました。

ツール

pypi.org

github.com

作ったモチベーションは、たまたまこの制限にぶち当たる案件にぶち当たったからですね。あとはシンプルに久しぶりに他の開発をしたいなというやつです。

必要環境

(これは普通に近いうちにちゃんと 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 は以下の方法が参考になるかと思います。

zenn.dev

トークン方式はどうやるんだっけ〜ってなってるので思い出したら実装します。

オプション

  • --repo or -r
  • --file-username or -u
  • --limit or -l

--limit 以外は必須です。

--repo は PR を参照するリポジトリ名です org/repo のような感じで指定します。
このリポジトリだったら nnsnodnb/github-pr-slack-reminder ですね。

--file-usernameGitHub のユーザ名と 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 の制限をいい感じに突破する打開策。
シンプルな解決策でもいいけどそれでやろうかな。

最後に

頑張って改善していくぞ