GitHub のプルリクとメンションをおしらせする hubot スクリプトを書いた

TL;DR

前提と問題

開発のoieioiです。

ハンズシェアではコード・タスク管理にGitHub、チャットツールにSlackを使っています。困るのがGitHubのメンションとプルリクのレビュー依頼を見逃しがちなところ。メールボックスは開きたくないし、お知らせ系はチャットにまとめたい。

まずはGitHubとSlackのアカウント名を合わせて、Slackの公式GitHubプラグインを入れてみます。これでリポジトリにつけられたコメントやプルリク作成は適宜Slackに流れて来るようになります。しかし自分に関連するものをお知らせしてくれません。困った。

GitHubのAPIはいろいろありライブラリも充実してるので、hubotで自作することにします。

メンションお知らせボットを作る

まずはメンションをなんとかします。要件は次の通り; GitHubの特定のリポジトリでメンションされたらSlackでメンションされた人に通知する

で、成果はこちらです。CoffeeScriptで書きました。雑に書けて雑に動かせるCoffeeScriptはhubotの書き捨てスクリプトを作るのに向いてると思います。半分は懐古趣味です。このスクリプトではこんなことをやっています。

  1. リポジトリ以下で発生した全てのアクティビティを一定時間ごとに取得する
  2. 今回のフェッチ時間を hubot.brain に保存
  3. アクティビティをフィルタリング
    • APIでとれてきたアクティビティのうちからイベント名が "mentioned" のものを抽出
    • 前回のフェッチ時間より後のものを抽出
  4. 対象者に"@"をつけてSlackに流す

プルリクお知らせボットをつくる

同じ要領でプルリクを一定時間ごとにお知らせさせます。要件は次の通り; 一定時間ごとにオープンなプルリクのレビュー状況をSlackで通知する

で、成果はこちらです。GitHubのプルリクAPIがなかなか扱いにくく、レビュワーの最新レビュー状況を判断するために以下みたいなことをやってます。やりたいことはGitHubプルリクページの右サイドバーのこれを作りたいだけなんですが、一発でとれるAPIがみつかりませんでした。

  1. 任意のリポジトリのプルリクを一定時間ごとに取得する
  2. 各プルリクのレビュー状況を取得する
    1. プルリク作成者が指定したレビュワー(requested_reviewers)を調べる
    2. すでに行われたレビューの状態(承認、否認、コメント)を調べる
    3. レビューをレビュワー別にまとめて、最新のレビュー状況を抽出する (なにもしてない、承認、否認、コメント)
  3. 関係者に "@" をつけてSlackに流す

まとめと課題

https://handsshare.gyazo.com/9ade71ff5ca0a08e61862e9265f0c61e

出来ました!ハンズシェアのhubotはnekoという名前でかわいいです。hubotは改造すればするだけ愛着がわきます。

課題としては以下があります。

  • ポーリングをウェブフックにする
  • SlackとGitHubのアカウント名が違うと設定が面倒くさいので何とかしてマッピングしたい
  • CoffeeScriptだと誰も書きたがらないのでJavaScriptにする

ところで、GitHubのSlack公式サポートが出ました。SlackアカウントとGitHubアカウントを紐づけてくれるサポートがでてきたら上のスクリプトも必要なくなりそう。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です