Skip to content

Commit 9b23ab1

Browse files
authored
chore: fix Slack release thread notifications (#2802)
* chore(monorepo): send Slack notifications on test failure Add always() to the if conditions of extract results and Slack notification steps so they run even when the test step fails. Previously, these steps were skipped by default when the preceding test step exited with a non-zero code. * chore(monorepo): fix Slack release thread notifications - Make release-thread-integration action generic by replacing deployment_name with title and link_text inputs - Fix duplicate icon in Slack messages by removing hardcoded ✅ from the action template - Use ❌ instead of ⚠️ for test failure notifications - Add always() to extract/notification steps so they run on test failures * chore(monorepo): address PR review feedback - Null-safe jq extraction for slack_message_url using // "" - Add !cancelled() guard to Slack notification steps - Add continue-on-error to E2E extraction step - Remove trailing colon from action fallback text
1 parent b60cedc commit 9b23ab1

5 files changed

Lines changed: 26 additions & 16 deletions

File tree

.github/actions/release-thread-integration/action.yml

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,15 @@ inputs:
1111
slack_bot_token:
1212
description: 'Slack bot token for posting messages'
1313
required: true
14-
deployment_name:
15-
description: 'Name of the deployment (e.g., "JS SDK", "Sanity Suite", "NPM Package")'
14+
title:
15+
description: 'Title for the Slack message (e.g., ":white_check_mark: JS SDK deployment completed")'
1616
required: true
17+
link_text:
18+
description: 'Text for the Slack message link (e.g., "View deployment details", "View test results")'
19+
required: false
20+
default: 'View details'
1721
slack_message_url:
18-
description: 'Slack message URL for the deployment'
22+
description: 'Slack message URL'
1923
required: false
2024
slack_api_response:
2125
description: 'JSON response from Slack API containing message details'
@@ -246,13 +250,13 @@ runs:
246250
{
247251
"channel": "${{ steps.extract-info.outputs.channel_id }}",
248252
"thread_ts": "${{ steps.extract-info.outputs.thread_ts }}",
249-
"text": ":white_check_mark: ${{ inputs.deployment_name }} deployment completed: <${{ steps.extract-message-url.outputs.message_url }}|View deployment details>\n\nCC: ${{ inputs.slack_slugs }}",
253+
"text": "${{ inputs.title }}\n<${{ steps.extract-message-url.outputs.message_url }}|${{ inputs.link_text }}>\n\nCC: ${{ inputs.slack_slugs }}",
250254
"blocks": [
251255
{
252256
"type": "section",
253257
"text": {
254258
"type": "mrkdwn",
255-
"text": ":white_check_mark: *${{ inputs.deployment_name }} deployment completed*${{ inputs.custom_message != '' && format('\n\n{0}', inputs.custom_message) || '' }}\n<${{ steps.extract-message-url.outputs.message_url }}|View deployment details>\n\nCC: ${{ inputs.slack_slugs }}"
259+
"text": "*${{ inputs.title }}*${{ inputs.custom_message != '' && format('\n\n{0}', inputs.custom_message) || '' }}\n<${{ steps.extract-message-url.outputs.message_url }}|${{ inputs.link_text }}>\n\nCC: ${{ inputs.slack_slugs }}"
256260
}
257261
}
258262
]

.github/workflows/deploy-npm.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,8 @@ jobs:
399399
monorepo_release_version: ${{ inputs.monorepo_release_version }}
400400
release_ticket_id: ${{ inputs.release_ticket_id }}
401401
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
402-
deployment_name: 'JS SDK NPM Package'
402+
title: ':white_check_mark: JS SDK NPM Package deployment completed'
403+
link_text: 'View deployment details'
403404
slack_api_response: ${{ steps.slack.outputs.response }}
404405

405406
- name: Send message to Slack channel for Service Worker

.github/workflows/deploy-sanity-suite.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ jobs:
233233
monorepo_release_version: ${{ inputs.monorepo_release_version }}
234234
release_ticket_id: ${{ inputs.release_ticket_id }}
235235
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
236-
deployment_name: 'Sanity Suite'
236+
title: ':white_check_mark: Sanity Suite deployment completed'
237+
link_text: 'View deployment details'
237238
slack_api_response: ${{ steps.slack.outputs.response }}
238239
slack_slugs: '<!subteam^S0555JBV36D> <!subteam^S03SW7DM8P3>'

.github/workflows/deploy.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ jobs:
363363
monorepo_release_version: ${{ inputs.monorepo_release_version }}
364364
release_ticket_id: ${{ inputs.release_ticket_id }}
365365
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
366-
deployment_name: 'JS SDK Browser Package'
366+
title: ':white_check_mark: JS SDK Browser Package deployment completed'
367+
link_text: 'View deployment details'
367368
slack_api_response: ${{ steps.slack.outputs.response }}
368369
custom_message: ${{ inputs.environment == 'production' && 'Proceed to perform post-release testing of your changes.' || inputs.environment == 'staging' && 'Proceed to perform pre-release testing of your changes.' || '' }}
369370

.github/workflows/run-e2e-regression-test-suites.yml

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,10 +134,10 @@ jobs:
134134
- name: Extract sanity test results
135135
id: extract-sanity-results
136136
continue-on-error: true
137-
if: steps.run_sanity_tests.outputs.has_outputs == 'true'
137+
if: always() && steps.run_sanity_tests.outputs.has_outputs == 'true'
138138
run: |
139139
# Extract all fields from job outputs
140-
slack_message_url=$(echo '${{ steps.run_sanity_tests.outputs.job_outputs }}' | jq -r '.slack_message_url')
140+
slack_message_url=$(echo '${{ steps.run_sanity_tests.outputs.job_outputs }}' | jq -r '.slack_message_url // ""')
141141
test_passed=$(echo '${{ steps.run_sanity_tests.outputs.job_outputs }}' | jq -r '.test_status.passed // ""')
142142
test_total=$(echo '${{ steps.run_sanity_tests.outputs.job_outputs }}' | jq -r '.test_status.total // ""')
143143
test_percentage=$(echo '${{ steps.run_sanity_tests.outputs.job_outputs }}' | jq -r '.test_status.percentage // ""')
@@ -153,13 +153,14 @@ jobs:
153153
154154
- name: Post sanity test results to release thread
155155
continue-on-error: true
156-
if: ${{ inputs.monorepo_release_version != '' && inputs.release_ticket_id != '' && steps.extract-sanity-results.outputs.slack_message_url != '' }}
156+
if: ${{ !cancelled() && always() && inputs.monorepo_release_version != '' && inputs.release_ticket_id != '' && steps.extract-sanity-results.outputs.slack_message_url != '' }}
157157
uses: ./.github/actions/release-thread-integration
158158
with:
159159
monorepo_release_version: ${{ inputs.monorepo_release_version }}
160160
release_ticket_id: ${{ inputs.release_ticket_id }}
161161
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
162-
deployment_name: ${{ format('{0} Sanity E2E Regression Tests', steps.extract-sanity-results.outputs.test_success == 'true' && ':white_check_mark:' || ':warning:') }}
162+
title: ${{ format('{0} Sanity E2E Regression Tests completed', steps.extract-sanity-results.outputs.test_success == 'true' && ':white_check_mark:' || ':x:') }}
163+
link_text: 'View test results'
163164
slack_message_url: ${{ steps.extract-sanity-results.outputs.slack_message_url }}
164165
custom_message: ${{ steps.extract-sanity-results.outputs.test_success == 'true' && 'All tests passed successfully. Proceed to the next step.' || 'There are some test failures. Please review them and proceed to the next step.' }}
165166

@@ -219,10 +220,11 @@ jobs:
219220

220221
- name: Extract E2E test results
221222
id: extract-e2e-results
222-
if: steps.run_e2e_tests.outputs.has_outputs == 'true'
223+
continue-on-error: true
224+
if: always() && steps.run_e2e_tests.outputs.has_outputs == 'true'
223225
run: |
224226
# Extract all fields from job outputs
225-
slack_message_url=$(echo '${{ steps.run_e2e_tests.outputs.job_outputs }}' | jq -r '.slack_message_url')
227+
slack_message_url=$(echo '${{ steps.run_e2e_tests.outputs.job_outputs }}' | jq -r '.slack_message_url // ""')
226228
test_passed=$(echo '${{ steps.run_e2e_tests.outputs.job_outputs }}' | jq -r '.test_status.passed // ""')
227229
test_total=$(echo '${{ steps.run_e2e_tests.outputs.job_outputs }}' | jq -r '.test_status.total // ""')
228230
test_percentage=$(echo '${{ steps.run_e2e_tests.outputs.job_outputs }}' | jq -r '.test_status.percentage // ""')
@@ -238,12 +240,13 @@ jobs:
238240
239241
- name: Post E2E test results to release thread
240242
continue-on-error: true
241-
if: ${{ inputs.monorepo_release_version != '' && inputs.release_ticket_id != '' && steps.extract-e2e-results.outputs.slack_message_url != '' }}
243+
if: ${{ !cancelled() && always() && inputs.monorepo_release_version != '' && inputs.release_ticket_id != '' && steps.extract-e2e-results.outputs.slack_message_url != '' }}
242244
uses: ./.github/actions/release-thread-integration
243245
with:
244246
monorepo_release_version: ${{ inputs.monorepo_release_version }}
245247
release_ticket_id: ${{ inputs.release_ticket_id }}
246248
slack_bot_token: ${{ secrets.SLACK_BOT_TOKEN }}
247-
deployment_name: ${{ format('{0} Full E2E Regression Tests', steps.extract-e2e-results.outputs.test_success == 'true' && ':white_check_mark:' || ':warning:') }}
249+
title: ${{ format('{0} Full E2E Regression Tests completed', steps.extract-e2e-results.outputs.test_success == 'true' && ':white_check_mark:' || ':x:') }}
250+
link_text: 'View test results'
248251
slack_message_url: ${{ steps.extract-e2e-results.outputs.slack_message_url }}
249252
custom_message: ${{ steps.extract-e2e-results.outputs.test_success == 'true' && 'All tests passed successfully. Proceed to the next step.' || 'There are some test failures. Please review them and proceed to the next step.' }}

0 commit comments

Comments
 (0)