LoginSignup
2
0

GithubActionsを使ってPRのLabelをフックしてSlackに通知を送る

Last updated at Posted at 2023-11-02

解決したいこと

PRによって「今すぐマージしたいからはやく見てくれ!!」という切羽詰まったものから「来週のリリースまでに入ればいいからお手隙で確認してね」みたいなものまで、緊急性に幅があると思います。
緊急性が高い場合は開発メンバーにレビューを依頼する必要がありますよね。

けど、Reviewer設定したあとにわざわざメンション飛ばすのも面倒なので自動化したい!と思ったのでやってみました。

やったこと

緊急性に応じてLabelを作成(今回は”緊急”,”お手隙で”の2つ)

スクリーンショット 2023-11-03 午前3.26.32.png

PRに特定のLabelを割り当てるとSlackにメンション付きのメッセージが飛ぶ

スクリーンショット 2023-11-03 午前3.53.45.png

以上です!

実装

Labelを作成

Labelの粒度,どこまで通知するかはプロジェクトと相談
日本語と絵文字も使えました

スクリーンショット 2023-11-03 午前4.00.25.png

SlackのWebhookをリポジトリに紐づける

Incoming WebhookというアプリをSlackの管理画面から追加します。
[追記]
インテグレーションは非推奨なのでSlackAppを使用してIncoming Webhookを利用する
https://qiita.com/Akira07/items/890fbbc6c384fcf875d0

情報を追加したら設定を保存
Webhook URLをコピーしておく

スクリーンショット 2023-11-03 午前4.10.05.png

Actionを追加するリポジトリのSettings > Secrets and variables > Actionsに移動

New repository secretを押して作成

スクリーンショット 2023-11-03 午前4.16.00.png

Nameは任意

Secretは先ほどコピーしたURL

スクリーンショット 2023-11-03 午前4.16.34.png

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タブから詳細が確認できます

スクリーンショット 2023-11-03 午前4.37.09.png

Slackにも通知が飛んでいますね!

スクリーンショット 2023-11-03 午前4.38.31.png

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0