GitHub で以下のイベントが発生したときに、Slack にメンション付きメッセージを飛ばします。
- Issue, PR の本文・コメントでメンションされた
- review がリクエストされた
- review が返ってきた
AWS Lambda / API Gateway を利用しています。CloudFormation により、必要なリソースが一通りデプロイされるようにしています。
cp config-sample.json config.json
vi config.json # GitHub ユーザ名 -> Slack メンバーID の対応を設定してください
make
成功すれば、"GitHubHookURL" が画面に出力されます。
"Slack メンバー ID" は "U3KFKE98F" といった文字列です。ユーザ名ではありません(Slack API の仕様変更で、メンションをするにはメンバーIDが必須になりました。) メンバー ID は、各ユーザのプロフィールから調べることができます。設定ファイルでは先頭に "@" をつけるようにしてください。
初回はいくつかの設定項目が聞かれます。"SlackURL" には、通知を飛ばすチャンネル用の Slack WebHook URL を指定してください。
設定をやり直す場合は、
make reconfigure
を実行してください。
- GitHub App の登録画面に進む
- 右上のユーザアイコンをクリックし、出てくるメニューから "Settings" をクリック
- 左側のメニューから "Developer settings" をクリック
- “New GitHub App” をクリック
- GitHub App の設定
- “Git Hub App name” は適当につける
- “Webhook URL” に “(デプロイ時に出力される GitHubHookURL)” を設定
- “Repository permissions” で “Issue”, “Pull Request” を “Read-ony” に設定
- “Subscribe to events” に “Issue comment”, "Issues", "Pull request", "Pull request review", "Pull request review comment" をチェック
- "Create GitHub App" をクリック
- private key の生成を促されるので、生成する
- 通知を有効にするリポジトリに、設定した GitHub App をインストール
- 右上のユーザアイコンをクリックし、出てくるメニューから "Settings" をクリック
- 左側のメニューから "Developer settings" をクリック
- 先程作った App があるので、"Edit" をクリック
- 左側のメニューから "Install App" をクリック
- インストールするリポジトリを選択
- "WebHook" を追加
- "WebHook" の設定
- "Payload URL" に、“(デプロイ時に出力される GitHubHookURL)” の値を設定してください。
- "Content Type" には "application/json" を指定してください。
- "Which events would you like to trigger this webhook?" には、"Let me select individual events." を選び、"Issue comments", "Issues", "Pull requests", "Pull request reviews", "Pull request review comments" にチェックを入れてください。
デプロイが完了すると、GitHub に PR やメンションつきのメッセージがくると、github_webhook_lambda.py をソースとする lambda が呼び出されます。
github_webhook_lambda.py では、GitHub のイベント情報 (JSON 形式) を読み取って、必要であれば Slack に通知を投げます。通知先 URL はデプロイ時のパラメータ "SlackURL" で設定した箇所になります。
GitHub App として連携すると、各種イベントが発生したときに "Webhook URL" にイベントが送付されます。
イベントの例は tests/testdata にある各種 json ファイルにありますので、そちらを参照ください。