GitHubActions でプルリクの情報をレビューアにメンションをつけてSlack通知する
1. はじめに
現在、自分の所属する開発チームでは、プルリク作成後、レビューアにSlackでその情報を送信しています。
今回はGitHubActionsでプルリクの情報をSlackにメンション付きで通知するyml構文を書きました。
これで、slackへの通知を自動化します。
2. 実装
今回作成したコードのサンプルは以下です。
name: Send_Pullrequest-Message
on:
pull_request:
types:
- ready_for_review
jobs:
send_pullrequest-message:
timeout-minutes: 2
runs-on: ubuntu-latest
steps:
- name: member1
if: github.event.pull_request.requested_reviewers[0].login == 'member1'
run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
- name: member2
if: github.event.pull_request.requested_reviewers[0].login == 'member2'
run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
- name: member3
if: github.event.pull_request.requested_reviewers[0].login == 'member3'
run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
- uses: slackapi/slack-github-action@v1.16.0
if: env.Login_Name != ''
with:
payload: "{\"text\":\" <@${{ env.Login_Name }}>\\n 以下のプルリクエストを作成しました。\\n
Title : ${{ github.event.pull_request.title}}\\n
URL : ${{ github.event.pull_request.html_url}}\\n
Assignees : ${{ github.event.pull_request.assignees[0].login}}\\n
Revwer : ${{ github.event.pull_request.requested_reviewers[0].login}}\"}"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
3. GitHub Actionsを使用したSlack通知ワークフローの解説
3.1 ワークフローのトリガー
このワークフローは、Pull Requestの状態が"ready_for_review"に変化したときにトリガーされます。これにより、コードレビューの準備が整ったときにSlack通知を送信できます。
運用に合わせて、「レビューアが割り当てられた」、「プルリクが作成された」時などにトリガーを変更できます。ワークフローのトリガについてはこちらを参照。
※"ready_for_review"はドラフトプルリクエストからプルリクエストを作成したときのことです。
on:
pull_request:
types:
- ready_for_review
3.2 ジョブの実行
ワークフローのジョブは、以下のステップから成り立っています。
3.2.1 メンションをつけて通知するための準備
Pull Requestが特定のレビュアーにアサインされたとき、それに対応するSlackメンバーに通知を送信します。
Slackにメンションをつけてメッセージを送信するためには、メンバーIDが必要になります。
SlackのメンバーIDの取得方法はこちらを参考
以下のコードはレビューアのGitのアカウント名を取得し、SlackのメンバーIDをマッピングし、環境変数に格納しています。
- name: member1
if: github.event.pull_request.requested_reviewers[0].login == 'member1'
run: echo "Login_Name=Slack_memberID" >> "$GITHUB_ENV"
同様のステップがmember2およびmember3のメンバーに対して設定されています。
3.2.2 Slack通知
条件に合致したメンバーがいる場合、Slack通知を送信します。これにはGitHub Actionsのワークフローが提供する環境変数を使用します。
- uses: slackapi/slack-github-action@v1.16.0
if: env.Login_Name != ''
with:
payload: "{\"text\":\" <@${{ env.Login_Name }}>\\n 以下のプルリクエストを作成しました。\\n
Title : ${{ github.event.pull_request.title}}\\n
URL : ${{ github.event.pull_request.html_url}}\\n
Assignees : ${{ github.event.pull_request.assignees[0].login}}\\n
Revwer : ${{ github.event.pull_request.requested_reviewers[0].login}}\"}"
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
このステップでは、SlackのWebhookを介してメンション付きのメッセージを送信し、プルリクエストの詳細情報を表示します。
github.event.pull_request
を使用してプルリクのタイトルやURL、reviewer、assignee を取得し、メッセージを送信しています。
4. 実行結果
実行してみると、以下のようにメンション付きでSlackにメッセージが送信されました!
開発チームで運用する際は、ドラフトプルリクエストをはじめに作成しておき、すべて完了してからプルリクエストに変更することでレビューアにメッセージを自動で通知してくれます。
5. おわりに
今回はGitHubActions でyml構文を使用してSlackにプルリク情報をメンション付きで送信しました。
サンプルを元に少し変更するだけで、チームにあった運用が可能になると思いますので参考までにご活用ください。
今後チームで運用しながら、より便利なものに仕上げたいと考えております。