Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ## | ||
| # A reusable workflow for posting messages to the Making WordPress | ||
| # Core Slack Instance by submitting data to Slack webhook URLs | ||
| # received by Slack Workflows. | ||
| ## | ||
| name: Slack Notifications | ||
| on: | ||
| workflow_call: | ||
| inputs: | ||
| calling_status: | ||
| description: 'The status of the calling workflow' | ||
| type: string | ||
| required: true | ||
| secrets: | ||
| SLACK_GHA_SUCCESS_WEBHOOK: | ||
| description: 'The Slack webhook URL for a successful build.' | ||
| required: true | ||
| SLACK_GHA_CANCELLED_WEBHOOK: | ||
| description: 'The Slack webhook URL for a cancelled build.' | ||
| required: true | ||
| SLACK_GHA_FIXED_WEBHOOK: | ||
| description: 'The Slack webhook URL for a fixed build.' | ||
| required: true | ||
| SLACK_GHA_FAILURE_WEBHOOK: | ||
| description: 'The Slack webhook URL for a failed build.' | ||
| required: true | ||
| # Disable permissions for all available scopes by default. | ||
| # Any needed permissions should be configured at the job level. | ||
| permissions: {} | ||
| env: | ||
| CURRENT_BRANCH: ${{ github.ref_name }} | ||
| jobs: | ||
| # Gathers the details needed for Slack notifications. | ||
| # | ||
| # These details are passed as outputs to the subsequent, dependant jobs that | ||
| # submit data to Slack webhook URLs configured to post messages. | ||
| # | ||
| # Performs the following steps: | ||
| # - Retrieves the current workflow run. | ||
| # - Determines the conclusion of the previous workflow run or run attempt. | ||
| # - Sets the previous conclusion as an output. | ||
| # - Prepares the commit message. | ||
| # - Constructs and stores a message payload as an output. | ||
| prepare: | ||
| name: Prepare notifications | ||
| runs-on: ubuntu-24.04 | ||
| permissions: | ||
| actions: read | ||
| contents: read | ||
| timeout-minutes: 5 | ||
| if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event.workflow_run.event != 'pull_request' }} | ||
| outputs: | ||
| previous_conclusion: ${{ steps.previous-attempt-result.outputs.result }} | ||
| payload: ${{ steps.create-payload.outputs.payload }} | ||
| steps: | ||
| - name: Determine the status of the previous attempt | ||
| id: previous-attempt-result | ||
| uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | ||
| with: | ||
| retries: 2 | ||
| retry-exempt-status-codes: 418 | ||
| result-encoding: string | ||
| script: | | ||
| const workflow_run = await github.rest.actions.getWorkflowRun({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| run_id: `${context.runId}`, | ||
| }); | ||
| if ( process.env.CALLING_STATUS == 'failure' && workflow_run.data.run_attempt == 1 ) { | ||
| return 'first-failure'; | ||
| } | ||
| // When a workflow has been restarted, check the previous run attempt. Because workflows are automatically | ||
| // restarted once and a failure on the first run is not reported, failures on the second run should not be | ||
| // considered. | ||
| if ( workflow_run.data.run_attempt > 2 ) { | ||
| const previous_run = await github.rest.actions.getWorkflowRunAttempt({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| run_id: `${context.runId}`, | ||
| attempt_number: workflow_run.data.run_attempt - 1 | ||
| }); | ||
| return previous_run.data.conclusion; | ||
| } | ||
| // Otherwise, check the previous workflow run. | ||
| const previous_runs = await github.rest.actions.listWorkflowRuns({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| workflow_id: workflow_run.data.workflow_id, | ||
| branch: process.env.CURRENT_BRANCH, | ||
| exclude_pull_requests: true, | ||
| }); | ||
| // This is the first workflow run for this branch or tag. | ||
| if ( previous_runs.data.workflow_runs.length < 2 ) { | ||
| return 'none'; | ||
| } | ||
| const expected_events = new Array( 'push', 'schedule', 'workflow_dispatch' ); | ||
| // Find the workflow run for the commit that immediately preceded this one. | ||
| for ( let i = 0; i < previous_runs.data.workflow_runs.length; i++ ) { | ||
| if ( previous_runs.data.workflow_runs[ i ].run_number == workflow_run.data.run_number ) { | ||
| let next_index = i; | ||
| do { | ||
| next_index++; | ||
| // Protects against a false notification when contributors use the trunk branch as the pull request head_ref. | ||
| if ( expected_events.indexOf( previous_runs.data.workflow_runs[ next_index ].event ) == -1 ) { | ||
| continue; | ||
| } | ||
| return previous_runs.data.workflow_runs[ next_index ].conclusion; | ||
| } while ( next_index < previous_runs.data.workflow_runs.length ); | ||
| } | ||
| } | ||
| // Can't determine previous workflow conclusion. | ||
| return 'unknown'; | ||
| env: | ||
| CALLING_STATUS: ${{ inputs.calling_status }} | ||
| - name: Get the commit message | ||
| id: current-commit-message | ||
| uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 | ||
| if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }} | ||
| with: | ||
| retries: 2 | ||
| retry-exempt-status-codes: 418 | ||
| result-encoding: string | ||
| script: | | ||
| const commit_details = await github.rest.repos.getCommit({ | ||
| owner: context.repo.owner, | ||
| repo: context.repo.repo, | ||
| ref: context.sha, | ||
| }); | ||
| return commit_details.data.commit.message; | ||
| - name: Construct payload and store as an output | ||
| id: create-payload | ||
| run: | | ||
| COMMIT_MSG="$(echo "${COMMIT_MSG_RAW}" | awk 'NR==1')" | ||
| PAYLOAD="$( jq \ | ||
| -n \ | ||
| --arg workflow_name "${GITHUB_WORKFLOW}" \ | ||
| --arg ref_name "${CURRENT_BRANCH}" \ | ||
| --arg run_url "https://github.com/WordPress/wordpress-develop/actions/runs/${GITHUB_RUN_ID}/attempts/${GITHUB_RUN_ATTEMPT}" \ | ||
| --arg commit_message "${COMMIT_MSG}" \ | ||
| '{workflow_name: $workflow_name, ref_name: $ref_name, run_url: $run_url, commit_message: $commit_message}' | jq -c . | ||
| )" | ||
| echo "payload=$PAYLOAD" >> "$GITHUB_OUTPUT" | ||
| env: | ||
| COMMIT_MSG_RAW: ${{ ( github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' ) && steps.current-commit-message.outputs.result || github.event.head_commit.message }} | ||
| # Posts notifications when a workflow fails. | ||
| failure: | ||
| name: Failure notifications | ||
| permissions: {} | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 20 | ||
| needs: [ prepare ] | ||
| if: ${{ needs.prepare.outputs.previous_conclusion != 'first-failure' && inputs.calling_status == 'failure' || failure() }} | ||
| steps: | ||
| - name: Post failure notifications to Slack | ||
| <<<<<<< Updated upstream | ||
| <<<<<<< Updated upstream | ||
| uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| with: | ||
| webhook-type: webhook-trigger | ||
| webhook: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }} | ||
| payload: ${{ needs.prepare.outputs.payload }} | ||
| # Posts notifications the first time a workflow run succeeds after previously failing. | ||
| fixed: | ||
| name: Fixed notifications | ||
| permissions: {} | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 20 | ||
| needs: [ prepare ] | ||
| if: ${{ contains( fromJson( '["failure", "cancelled", "none"]' ), needs.prepare.outputs.previous_conclusion ) && inputs.calling_status == 'success' && success() }} | ||
| steps: | ||
| - name: Post failure notifications to Slack | ||
| <<<<<<< Updated upstream | ||
| <<<<<<< Updated upstream | ||
| uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| with: | ||
| webhook-type: webhook-trigger | ||
| webhook: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }} | ||
| payload: ${{ needs.prepare.outputs.payload }} | ||
| # Posts notifications when a workflow is successful. | ||
| success: | ||
| name: Success notifications | ||
| permissions: {} | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 20 | ||
| needs: [ prepare ] | ||
| if: ${{ inputs.calling_status == 'success' && success() }} | ||
| steps: | ||
| - name: Post success notifications to Slack | ||
| <<<<<<< Updated upstream | ||
| <<<<<<< Updated upstream | ||
| uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| with: | ||
| webhook-type: webhook-trigger | ||
| webhook: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} | ||
| payload: ${{ needs.prepare.outputs.payload }} | ||
| # Posts notifications when a workflow is cancelled. | ||
| cancelled: | ||
| name: Cancelled notifications | ||
| permissions: {} | ||
| runs-on: ubuntu-24.04 | ||
| timeout-minutes: 20 | ||
| needs: [ prepare ] | ||
| if: ${{ inputs.calling_status == 'cancelled' || cancelled() }} | ||
| steps: | ||
| - name: Post cancelled notifications to Slack | ||
| <<<<<<< Updated upstream | ||
| <<<<<<< Updated upstream | ||
| uses: slackapi/slack-github-action@70cd7be8e40a46e8b0eced40b0de447bdb42f68e # v1.26.0 | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| ======= | ||
| uses: slackapi/slack-github-action@485a9d42d3a73031f12ec201c457e2162c45d02d # v2.0.0 | ||
| >>>>>>> Stashed changes | ||
| with: | ||
| webhook-type: webhook-trigger | ||
| webhook: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} | ||
| payload: ${{ needs.prepare.outputs.payload }} | ||