読者です 読者をやめる 読者になる 読者になる

Thanks Driven Life

日々是感謝

GitHub Webhook Service "twada-savannah"

カバレッジが低下するとライオンがコメントを書き残してくれる GitHub Webhook Service です。

http://twada-savannah.herokuapp.com/

f:id:gongoZ:20141016000204p:plain

経緯その1

先週末は台風19号が沖縄を襲いまして。台風が襲来するといつものあれが始まるわけです。

台風19号ボッチソン(ヴォンフォン) - eXtreme Hago | Doorkeeper

今回は抜けるまで時間もかかりそうだった(実際2日ぐらい居座ってた)ので、久々に参加してみようと思った次第です(表明はしてないけど)

経緯その2

@ さんのこのスライド レガシーコード改善の戦略と戦術 を読んでると出現する twada.png について

とのお返事を頂いたので、よしじゃあこれを使ってみよう、という次第です。

結果

ソースはこちらです。

https://github.com/gongo/twada-savannah

先にも記しましたが、現在 Heroku で稼動しています。

http://twada-savannah.herokuapp.com/

概要

animation gif や上記リンク先を見ていただければわかると思いますが、簡単に説明すると

  1. Coveralls と連携しているリポジトリに PullRequest を出すなどした結果、coveralls アカウントが「カバレッジこんだけ上昇したぜー」「今回は下がったぜー」とコメントをしてくる
  2. そこにサバンナ在住のライオンが襲来して、もし カバレッジが下がっていた場合 にコメントを残していく

たったこれだけです。

なんか動いてねーな?っていう時は

Webhook を設定したページにある「Recent Deliveries」をチェックしていただけると良いかと思われます。

f:id:gongoZ:20141016034439p:plain

SUCCESS 系は「coverage が低下(もしくは上昇)したということを coveralls がコメントした時」です。 ERROR 系は他のユーザがコメントした時とか、そこらへんです。

ERROR 系の場合、Response の Body でエラーメッセージ返してるのでそこらへんをご確認下さい。

いろいろと(1)

今回はパブリックに使えるように、ということで webhook の secret で検証したりとかはしない方針でした。

ですがそうなると curl 攻撃とかに備えないといけないので、そこらへんはいろいろとごちゃごちゃしました。 ソース見ていただければわかると思いますが、まあとりあえずごちゃごちゃしているので、どっか穴がありそう。 穴があっても攻めないで穏やかな気持で教えていただけるとありがたいです。

secret を使った自分用 webhook の方が安心できていいですねというお話でした。

いろいろと(2)

これは時々起こるのですが

  1. coveralls ユーザがコメントする
  2. webhook payload が飛んでくる
  3. 飛んできたコメントが実際に存在するかチェック するけど存在しない

みたいなことがありました。おそらくコメントが書かれてイベントが発火しているけど、そこから GitHub API で取得可能になるまでに少しラグがある時がある、みたいなところでしょうか。

コメント存在しなかったら 1,2 回リトライする、みたいなので丁度良さそう(今回は入れてませんが)

まとめ

いつか自分用で Webhook をほげほげする時の勉強になりました。あるだろうか。 あと、コメント残す用ユーザとして twada-savannah ユーザ も作りました

ほそく

一度コメントしたユーザをチェックしないで「コメントされた瞬間にコメントしかえす」みたいなこと書いてしまい

https://github.com/gongo/teeeeeeeeeeeest/pull/1

こういうことになりました。みなさん気をつけてください(この時は heroku destroy して止めました