久しぶりにunity以外の内容です
githubでプルリクエストをマージした際にそのイベントを取得してどうこうやりたかったので、書いてみた
一番最初はgoogle app scriptのdoPostをつかってレシーバにしようと思ったけど、これがどうにもうまくいかない..
しょうがないのでherokuサーバーを立ててそこで取得することに
今回は簡易的なものでいいやということでRuby on RailsではなくSinatraで書くことにしました
Heroku上でRubyを動かす手順は公式ページ通りにやればOK
Deploy your application to Heroku
ここの手順までやればOK
上記ページ通りにやると次のようなコードを書いてあると思いますが、これを書き換えます
require 'sinatra' get '/' do "Hello, world" end
今回はただgetで叩くだけではなく、post通信で送られてきた情報をつかってどうこうしたいので、
require 'sinatra' get '/' do "Hello, world" end post '/notify_merged' do #何かする "post result" end
こんな感じでpostの受け口を書く。
受け口が出来たらgithubのwebhookに登録する。
githubでsettings -> Webhooks -> Add webhookを選ぶ
PayloadURLには「herokuのurl+postのパス」を記載
上の例でいうと https://それぞれで違う.herokuapp.com/notify_merged
という感じ
次はwebhookのトリガーの設定。
今回はプルリクエストに関するイベントだけを受け取りたいので次のように設定
これでプルリクエストに関連する動作があるたびにイベントが送られます。
では先程のコードの方に戻ってプルリクのイベントを受け取ったあとの処理を書きます。
プルリクエストのタイミングでgithubからは以下のような情報が送られてきます。
Event Types & Payloads | GitHub Developer Guide
今回はマージリクエストのタイトルとコメントをとってきたいので、こんな感じ
require 'sinatra' get '/' do "Hello, world" end post '/notify_merged' do body = request.body.read if body == '' status 400 else parsed = JSON.parse(body) merge_info = parsed['pull_request'] action = parsed['action'] merged = merge_info['merged'] #今回はクローズしてかつmergeされたプルリクの情報を拾う if(action == 'closed' && merged) title = merge_info['title'] comment = merge_info['body'] var response = "タイトル:"+title +"/コメント:" + comment #responseを使って何かするときはここで response end end end
これをherokuにpushしたあとに実際にプルリク投げて取り込んでみると..
こんな感じでレスポンス返ってきます
以上!