🔔

PRのレビューリクエストをSlackにメンション付きで飛ばすAction

2022/01/25に公開

はじめに

最近Slackを使うようになったのですが、公式のGitHubアプリだとPRのレビューリクエストでメンションが飛ばず、気付きにくいので、GitHub Actionsを使って飛ばせるようにしてみました。

作ったものはこちらです。

https://github.com/marketplace/actions/pr-message-to-slack

ちなみに既に同じことを考えている方が、Marketplaceで検索してみると、それなりにいらっしゃいます。

特にこちらは、今回私が作ったものと近いです。

https://github.com/marketplace/actions/slack_notice

作ったもの

こんな感じでPRのレビューリクエストをメンション付きで通知してくれます。

設定方法

事前に、自分のワークスペースでSlack Appを作成し、Incoming Webhooksを有効化し、Webhook URLを生成しておく必要があります。

生成されたWebhook URLは、GitHubリポジトリのActions Secretsに設定しておきます。

ワークフローファイルはこんな感じで設定します。

on:
  pull_request:
    # review_requestedだけサポートしています。
    types: [review_requested]

# 複数のレビュワーを設定したとき、複数回review_requestedイベントが発生するので、
# 同時に実行される場合があります。それによる複数回の通知を防止します。
concurrency:
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

jobs:
  pr-message-to-slack:
    runs-on: ubuntu-latest
    steps:
      # 後述のslack-id.jsonを参照するために必要です。
      - uses: actions/checkout@v2
      - uses: hirokisakabe/pr-message-to-slack@v1.0.0
        env:
          # Actions Secretsに設定してあるWebhook URL
          PR_MESSAGE_SLACK_WEBHOOK_URL: ${{ secrets.PR_MESSAGE_SLACK_WEBHOOK_URL }}

ワークフローファイル以外に、.github/slack-id.jsonを設定する必要があります。これで、GitHubのユーザ名とSlackのメンバIDをマッピングします。

{
  "UserA's GitHub username": "UserA's Slack member ID",
  "UserB's GitHub username": "UserB's Slack member ID"
}

SlackのメンバIDは、ここで取得できるやつです。

感想

はじめてGitHub Actionsを作ったので、イベントからのデータの取り出し方などを学ぶことができました。

また、@vercel/nccをはじめて知りました。これは便利。

Discussion