mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2025-10-16 12:05:38 +00:00
When using a workflow as a callable workflow, the job status check functions do not take the called workflow into account. This has caused some failures to be incorrectly reported as successful. This adds an input to the Slack notifications workflow for when the `workflow_call` event is used. See #53363. git-svn-id: https://develop.svn.wordpress.org/trunk@52002 602fd350-edb4-49c9-b593-d223f7449a82
187 lines
7.7 KiB
YAML
187 lines
7.7 KiB
YAML
##
|
|
# 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_run:
|
|
workflows:
|
|
- Code Coverage Report
|
|
- Coding Standards
|
|
- End-to-end Tests
|
|
- JavaScript Tests
|
|
- PHP Compatibility
|
|
- PHPUnit Tests
|
|
- Test NPM
|
|
- Test old branches
|
|
types:
|
|
- completed
|
|
branches:
|
|
- '[3-4].[0-9]'
|
|
- '5.[0-8]'
|
|
|
|
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
|
|
|
|
env:
|
|
CURRENT_BRANCH: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_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 workflow ID (if necessary).
|
|
# - Retrieves the workflow URL (if necessary).
|
|
# - Retrieves the previous workflow run and stores its conclusion.
|
|
# - 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-latest
|
|
if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event.workflow_run.event != 'pull_request' }}
|
|
outputs:
|
|
previous_conclusion: ${{ steps.previous-conclusion.outputs.previous_conclusion }}
|
|
payload: ${{ steps.create-payload.outputs.payload }}
|
|
|
|
steps:
|
|
- name: Get the workflow ID
|
|
id: current-workflow-id
|
|
if: ${{ github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
|
|
uses: actions/github-script@441359b1a30438de65712c2fbca0abe4816fa667 # v5.0.0
|
|
with:
|
|
script: |
|
|
const workflow_run = await github.rest.actions.getWorkflowRun({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
run_id: ${{ github.run_id }},
|
|
});
|
|
return workflow_run.data.workflow_id;
|
|
|
|
- name: Get details about the previous workflow run
|
|
id: previous-result
|
|
uses: actions/github-script@441359b1a30438de65712c2fbca0abe4816fa667 # v5.0.0
|
|
with:
|
|
script: |
|
|
const previous_runs = await github.rest.actions.listWorkflowRuns({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
workflow_id: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.workflow_id || steps.current-workflow-id.outputs.result }},
|
|
branch: '${{ env.CURRENT_BRANCH }}',
|
|
per_page: 1,
|
|
page: 2,
|
|
});
|
|
return previous_runs.data.workflow_runs[0].conclusion;
|
|
|
|
- name: Store previous conclusion as an output
|
|
id: previous-conclusion
|
|
run: echo "::set-output name=previous_conclusion::${{ steps.previous-result.outputs.result }}"
|
|
|
|
- name: Get the commit message
|
|
id: current-commit-message
|
|
uses: actions/github-script@441359b1a30438de65712c2fbca0abe4816fa667 # v5.0.0
|
|
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
|
|
with:
|
|
script: |
|
|
const commit_details = await github.rest.repos.getCommit({
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
ref: '${{ github.sha }}'
|
|
});
|
|
return commit_details.data.commit.message;
|
|
|
|
- name: Prepare commit message.
|
|
id: commit-message
|
|
run: |
|
|
COMMIT_MESSAGE=$(cat <<'EOF' | awk 'NR==1' | sed 's/`/\\`/g' | sed 's/\"/\\\\\\"/g' | sed 's/\$/\\$/g'
|
|
${{ github.event_name == 'workflow_run' && github.event.workflow_run.head_commit.message || ( github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' ) && fromJson( steps.current-commit-message.outputs.result ) || github.event.head_commit.message }}
|
|
EOF
|
|
)
|
|
echo "::set-output name=commit_message_escaped::${COMMIT_MESSAGE}"
|
|
|
|
- name: Construct payload and store as an output
|
|
id: create-payload
|
|
run: echo "::set-output name=payload::{\"workflow_name\":\"${{ github.event_name == 'workflow_run' && github.event.workflow_run.name || github.workflow }}\",\"ref_name\":\"${{ env.CURRENT_BRANCH }}\",\"run_url\":\"https://github.com/WordPress/wordpress-develop/actions/runs/${{ github.event_name == 'workflow_run' && github.event.workflow_run.id || github.run_id }}\",\"commit_message\":\"${{ steps.commit-message.outputs.commit_message_escaped }}\"}"
|
|
|
|
# Posts notifications when a workflow fails.
|
|
failure:
|
|
name: Failure notifications
|
|
runs-on: ubuntu-latest
|
|
needs: [ prepare ]
|
|
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'failure' || inputs.calling_status == 'failure' || failure() }}
|
|
|
|
steps:
|
|
- name: Post failure notifications to Slack
|
|
uses: slackapi/slack-github-action@d5d276d7ae0f38f29322b80da9baf985cc80f8b1 # v1.15.0
|
|
with:
|
|
payload: ${{ needs.prepare.outputs.payload }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
|
|
|
|
# Posts notifications the first time a workflow run succeeds after previously failing.
|
|
fixed:
|
|
name: Fixed notifications
|
|
runs-on: ubuntu-latest
|
|
needs: [ prepare ]
|
|
if: ${{ needs.prepare.outputs.previous_conclusion == 'failure' && ( github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' || inputs.calling_status == 'success' ) && success() }}
|
|
|
|
steps:
|
|
- name: Post failure notifications to Slack
|
|
uses: slackapi/slack-github-action@d5d276d7ae0f38f29322b80da9baf985cc80f8b1 # v1.15.0
|
|
with:
|
|
payload: ${{ needs.prepare.outputs.payload }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
|
|
|
|
# Posts notifications when a workflow is successful.
|
|
success:
|
|
name: Success notifications
|
|
runs-on: ubuntu-latest
|
|
needs: [ prepare ]
|
|
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' || inputs.calling_status == 'success' && success() }}
|
|
|
|
steps:
|
|
- name: Post success notifications to Slack
|
|
uses: slackapi/slack-github-action@d5d276d7ae0f38f29322b80da9baf985cc80f8b1 # v1.15.0
|
|
with:
|
|
payload: ${{ needs.prepare.outputs.payload }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }}
|
|
|
|
# Posts notifications when a workflow is cancelled.
|
|
cancelled:
|
|
name: Cancelled notifications
|
|
runs-on: ubuntu-latest
|
|
needs: [ prepare ]
|
|
if: ${{ github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'cancelled' || inputs.calling_status == 'cancelled' || cancelled() }}
|
|
|
|
steps:
|
|
- name: Post cancelled notifications to Slack
|
|
uses: slackapi/slack-github-action@d5d276d7ae0f38f29322b80da9baf985cc80f8b1 # v1.15.0
|
|
with:
|
|
payload: ${{ needs.prepare.outputs.payload }}
|
|
env:
|
|
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }}
|