Add slack notifications for bad bugs (#46982)
Lena
created
Release Notes:
- N/A
Change summary
.github/workflows/slack_notify_first_responders.yml | 103 +++++++++++++++
1 file changed, 103 insertions(+)
Detailed changes
@@ -0,0 +1,103 @@
+name: Slack Notify First Responders
+
+on:
+ issues:
+ types: [labeled]
+
+env:
+ FIRST_RESPONDER_LABELS: '["priority:P0", "priority:P1"]'
+
+jobs:
+ notify-slack:
+ if: github.repository_owner == 'zed-industries'
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Check if label requires first responder notification
+ id: check-label
+ env:
+ LABEL_NAME: ${{ github.event.label.name }}
+ run: |
+ if echo '${{ env.FIRST_RESPONDER_LABELS }}' | jq -e --arg label "$LABEL_NAME" 'index($label) != null' > /dev/null; then
+ echo "should_notify=true" >> "$GITHUB_OUTPUT"
+ echo "Label '$LABEL_NAME' requires first responder notification"
+ else
+ echo "should_notify=false" >> "$GITHUB_OUTPUT"
+ echo "Label '$LABEL_NAME' does not require first responder notification, skipping"
+ fi
+
+ - name: Build Slack message payload
+ if: steps.check-label.outputs.should_notify == 'true'
+ env:
+ ISSUE_TITLE: ${{ github.event.issue.title }}
+ ISSUE_URL: ${{ github.event.issue.html_url }}
+ LABELED_BY: ${{ github.event.sender.login }}
+ LABEL_NAME: ${{ github.event.label.name }}
+ LABELS_JSON: ${{ toJson(github.event.issue.labels.*.name) }}
+ run: |
+ LABELS=$(echo "$LABELS_JSON" | jq -r 'join(", ")')
+
+ jq -n \
+ --arg label_name "$LABEL_NAME" \
+ --arg issue_title "$ISSUE_TITLE" \
+ --arg issue_url "$ISSUE_URL" \
+ --arg labeled_by "$LABELED_BY" \
+ --arg labels "$LABELS" \
+ '{
+ "blocks": [
+ {
+ "type": "section",
+ "text": {
+ "type": "mrkdwn",
+ "text": "<!subteam^S096CPUUGLF> Issue labeled *\($label_name)*"
+ }
+ },
+ {
+ "type": "section",
+ "fields": [
+ {
+ "type": "mrkdwn",
+ "text": "*Issue:*\n<\($issue_url)|\($issue_title)>"
+ },
+ {
+ "type": "mrkdwn",
+ "text": "*Labeled by:*\n\($labeled_by)"
+ },
+ {
+ "type": "mrkdwn",
+ "text": "*Labels:*\n\($labels)"
+ }
+ ]
+ }
+ ]
+ }' > payload.json
+
+ echo "Payload built successfully:"
+ cat payload.json
+
+ - name: Send Slack notification
+ if: steps.check-label.outputs.should_notify == 'true'
+ env:
+ SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_FIRST_RESPONDERS }}
+ run: |
+ if [ -z "$SLACK_WEBHOOK_URL" ]; then
+ echo "::error::SLACK_WEBHOOK_FIRST_RESPONDERS secret is not set"
+ exit 1
+ fi
+
+ HTTP_RESPONSE=$(curl -s -w "\n%{http_code}" -X POST "$SLACK_WEBHOOK_URL" \
+ -H "Content-Type: application/json" \
+ -d @payload.json)
+
+ HTTP_BODY=$(echo "$HTTP_RESPONSE" | sed '$d')
+ HTTP_STATUS=$(echo "$HTTP_RESPONSE" | tail -n 1)
+
+ echo "Slack API response status: $HTTP_STATUS"
+ echo "Slack API response body: $HTTP_BODY"
+
+ if [ "$HTTP_STATUS" -ne 200 ]; then
+ echo "::error::Slack notification failed with status $HTTP_STATUS: $HTTP_BODY"
+ exit 1
+ fi
+
+ echo "Slack notification sent successfully"