📝

Github Action で Google Chat Webhook に通知を送る

2024/08/08に公開

CA技研では Google Workspace を利用しており、コミュニケーションツールに Google Chat を利用しています。
そこで、Github のプルリクエストを Google Chat に通知する仕組みを作りました。

Github Webhoook は動作しない

Githubの通常のWebhookは400エラーで動作しませんでした。Payloadの型が異なるようです。
解決策としては、フォーマット用の中間サーバーを作成するか、Github Actions側でフォーマットしてから送信するかです。
中間サーバーは面倒なので、Github Actionsでごにょごにょします。

Github Actions で通知を送る

Workflowを作成する

以下のworkflowを作成します。

name: Google Chat Notification

on:
  pull_request:
    types: [opened, reopened, closed]

jobs:
  notify:
    runs-on: ubuntu-latest
    steps:
    - name: Send notification to Google Chat
      env:
        WEBHOOK_URL: ${{ secrets.GOOGLE_CHAT_WEBHOOK }}
        PR_TITLE: ${{ github.event.pull_request.title }}
        PR_URL: ${{ github.event.pull_request.html_url }}
        PR_ACTION: ${{ github.event.action }}
      run: |
        if [ -z "$WEBHOOK_URL" ]; then
          echo "Error: WEBHOOK_URL is not set. Please check your GitHub Secrets."
          exit 1
        fi

        MESSAGE="Pull Request $PR_ACTION:\\n$PR_TITLE\\n$PR_URL"

        RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H "Content-Type: application/json" -d "{\"text\": \"$MESSAGE\"}" "$WEBHOOK_URL")

        if [ "$RESPONSE" != "200" ]; then
          echo "Error: Failed to send notification. HTTP status code: $RESPONSE"
          exit 1
        else
          echo "Notification sent successfully"
        fi

これで最低限の情報を送信することができます。
メッセージを整形したい場合は、以下を参考にします。
https://developers.google.com/workspace/chat/format-messages?hl=ja

Webhook URLを設定する

まず、Google Chat で Webhook を作成します。

  1. Google Chat で通知を受け取りたい部屋(スペース)を開きます。
  2. 部屋の名前をクリックし、「アプリと統合」を選択します。
  3. 「+ Webhook を追加」をクリックします。
  4. Webhook の名前(例:「GitHub PR Notifications」)を入力します。(アバターは任意で)
  5. 「保存」をクリックすると、Webhook URL が生成されます。この URL をコピーしておきます。

次に、GithubのRepository secretにWebhoook URLを設定し、Github Actions から読み込めるようにします。

  1. リポジトリの「Settings」タブに移動します。
  2. 左側のメニューの「Security」カテゴリにある「Secrets and variables」を選択し、「Actions」をクリックします。
  3. 「New repository secret」ボタンをクリックします。
  4. 「Name」フィールドに GOOGLE_CHAT_WEBHOOK と入力します。
  5. 「Value」フィールドに、先ほどコピーした Google Chat の Webhook URL を貼り付けます。
  6. 「Add secret」をクリックして保存します。

実際にプルリクエストを作成してみる

こんな感じで成功しています。

Google Chat側にも通知が来ました。

参考

点群処理のための関数をまとめている私のレポジトリで実際に利用しています。
https://github.com/HiraiKyo/ply-processor-basics

Discussion