解決したいこと
PRによって「今すぐマージしたいからはやく見てくれ!!」という切羽詰まったものから「来週のリリースまでに入ればいいからお手隙で確認してね」みたいなものまで、緊急性に幅があると思います。
緊急性が高い場合は開発メンバーにレビューを依頼する必要がありますよね。
けど、Reviewer設定したあとにわざわざメンション飛ばすのも面倒なので自動化したい!と思ったのでやってみました。
やったこと
緊急性に応じてLabelを作成(今回は”緊急”,”お手隙で”の2つ)
PRに特定のLabelを割り当てるとSlackにメンション付きのメッセージが飛ぶ
以上です!
実装
Labelを作成
Labelの粒度,どこまで通知するかはプロジェクトと相談
日本語と絵文字も使えました
SlackのWebhookをリポジトリに紐づける
Incoming WebhookというアプリをSlackの管理画面から追加します。
[追記]
インテグレーションは非推奨なのでSlackAppを使用してIncoming Webhookを利用する
https://qiita.com/Akira07/items/890fbbc6c384fcf875d0
情報を追加したら設定を保存
Webhook URLをコピーしておく
Actionを追加するリポジトリのSettings > Secrets and variables > Actionsに移動
New repository secretを押して作成
Nameは任意
Secretは先ほどコピーしたURL
workflowを追加
リポジトリ/.github/workflows/ 以下に下記のymlファイルを追加
上記のフォルダがない場合は作成してください
name: Notify Slack with Mention
on:
pull_request:
types:
- labeled
jobs:
notify_slack:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v2
- name: Notify Slack
if: |
(
(github.event.action == 'labeled' && github.event.label.name == '緊急🔥')
||
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, '緊急🔥'))
)
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
SLACK_MENTION: "<!channel>" # メンションを追加
run: |
label_name="${{ github.event.label.name }}"
pr_number="${{ github.event.number }}"
pr_url="${{ github.event.pull_request.html_url }}"
channel="#github_pr" # チャンネル名を指定
message="ラベルの種類: $label_name\nPR: $pr_url $SLACK_MENTION" # メンションをメッセージに追加
curl -X POST -H 'Content-type: application/json' --data "{'text':'$message', 'channel':'$channel'}" $SLACK_WEBHOOK_URL
(github.event.action == 'labeled' && github.event.label.name == '緊急🔥')
||
(github.event.action == 'synchronize' && contains(github.event.pull_request.labels.*.name, '緊急🔥'))
ここで特定のLabelが新しく貼られたか更新されたPRを検知します
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
SLACK_MENTION: "<!channel>" # メンションを追加
secrets.SLACK_WEBHOOKは先ほど作ったSecretの文字列
メンションする場合は”@channel”ではなくこのフォーマットを使用
あとはSlackに必要な情報をPostしているだけです
実行確認
指定したLabel付きのPRを作成 or 既存のPRに付与するとworkflowが開始
エラーなどで失敗した場合はActionsタブから詳細が確認できます
Slackにも通知が飛んでいますね!
参考