長い名前だ!!! そしてマニアック.
https://metacpan.org/release/App-GitHubWebhooks2Ikachan
https://github.com/moznion/App-GitHubWebhooks2Ikachan
これは何
GitHubのWebhooksを受け取って,いい感じにしてIkachanに投げる君です.
現状,issues
,pull_request
,issue_comment
,push
の各イベントに対応しています.
雰囲気としてはこんな感じの通知がIRCに飛ぶ.
[issue opened] This is new issue (@moznion) https://github.com/moznion/sandbox/issues/13
[comment (#13)] foobar (@moznion) https://github.com/moznion/sandbox/issues/13#issuecomment-37093289
[push to master] Commit1 (@moznion) https://github.com/moznion/sandbox/commit/b4da12df1bc19d2b20d7ab8a11fe9a4413ddf509
[push to master] Commit2 (@moznion) https://github.com/moznion/sandbox/commit/e2e64cea713dbfb574f1ace80a4be6c55f98433d
[pull request opened] New Pull Request (@moznion) https://github.com/moznion/sandbox/pull/15
GitHubのWebhooksの詳細については以下などを参照いただくと良いでしょう.
http://developer.github.com/webhooks/
http://developer.github.com/v3/activity/events/types/
使い方
まず何はなくともサーバを立ち上げます.
CPAN経由でこのアプリケーションをインストールするとgithubwebhooks2ikachan
というコマンドがインストールされるのでそれを使って以下のように立ち上げるのが良いでしょう.
$ githubwebhooks2ikachan --ikachan_url=http://your-ikachan-server.com/notice --port=12345
この時,ikachan_urlは必須です.portはオプショナルです.デフォルトだと5555番ポートが使われます.
次にGitHubのWebhooksを登録します.
リポジトリの設定のところから“Webhooks & Services”を開いてWebhooksの設定を行います.
「どのイベントの時にWebhook送ってほしい?」って部分は“Send me everything”にしておけば良いと思います.
肝心のPayload URL
は以下のようになるでしょう.
http://your-githubwebhooks2ikachan-server.com/${path}?subscribe=issues,pull_request&issues=opened,closed&pull_request=opened
${path}
の部分は通知を送りたいIRCのチャンネル名になります.
つまり,http://your-githubwebhooks2ikachan-server.com/%23foobarとか書いておくと,#foobarにメッセージが飛びます.
クエリパラメータのsubscribe
の部分は通知を飛ばして欲しいイベント名をコンマセパレ―テッドで指定できます.
例えば,subscribe=issues,pull_request
と書くと,issues
イベントとpull_request
イベントだけ通知するようになります.
このパラメータを省略した場合は,対応しているイベントすべて *1 のWebhookが飛んできた時に通知します.
issues
とpull_request
パラメータは通知を飛ばして欲しいアクション名をコンマセパレ―テッドで指定できます.
例えば,issues=open,close
のように書くと,issueがopenされた時とcloseされた時にだけ通知を飛ばすようになります.
パラメータを省略した場合はすべてのアクションに対して通知します.
いろいろ
本当はissuesやpull_requestとかだけではなく任意のイベントを差し込めたり,NotifierをIkachanだけではなくて他のものに差し替えられたり,出力フォーマットを好みの形に変更できたりする予定だったんですが,複雑性が増す上に利用側に結構な量のconfigを書いてもらわなければならなくなったので,今の形に落ち着きました.
「このイベントが取れないとは何事だ!」みたいなお叱り等ございましたら,Issueなどに登録していただけると対応しますのでよろしくお願いします.
*1:つまりissues
,pull_request
,issue_comment
,push