Skip to content

Commit

Permalink
Merge pull request #329 from stackhpc/slack-notifications
Browse files Browse the repository at this point in the history
Add Slack notification to Github workflows
  • Loading branch information
markgoddard authored Sep 10, 2024
2 parents ebd06c3 + ebc3fe1 commit f4114ae
Show file tree
Hide file tree
Showing 11 changed files with 158 additions and 0 deletions.
51 changes: 51 additions & 0 deletions .github/actions/slack-alert/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
# See the "workflow builder" approach in https://github.com/slackapi/slack-github-action/.
name: Slack alert
description: Send an alert to a Slack channel using workflow builder
inputs:
inputs:
description: Textual representation of workflow inputs
required: false
default: "N/A"
type: string
message:
description: Slack alert message
required: false
default: "${{ github.workflow }}/${{ github.job }} GitHub Actions workflow failed :sob:"
type: string
results-url:
description: URL for workflow results
required: false
default: "N/A"
type: string
# Typically this would be a secret.
slack-webhook-url:
description: Slack workflow builder webhook URL
required: true
type: string
# Typically this would be a secret or variable.
slack-channel-id:
description: ID of Slack channel to send alert to
required: true
type: string
runs:
using: composite
steps:
- name: Send message to Slack via Workflow Builder
uses: slackapi/[email protected]
with:
payload: |
{
"channel-id": "${{ env.SLACK_CHANNEL_ID }}",
"inputs": "${{ env.INPUTS }}",
"message": "${{ env.MESSAGE }}",
"results-url": "${{ env.RESULTS_URL }}",
"workflow-url": "${{ env.WORKFLOW_URL }}"
}
env:
SLACK_WEBHOOK_URL: ${{ inputs.slack-webhook-url }}
SLACK_CHANNEL_ID: ${{ inputs.slack-channel-id }}
INPUTS: ${{ inputs.inputs }}
MESSAGE: ${{ inputs.message }}
RESULTS_URL: ${{ inputs.results-url }}
WORKFLOW_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
11 changes: 11 additions & 0 deletions .github/workflows/container-promote.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,3 +56,14 @@ jobs:
env:
FILTER: ${{ github.event.inputs.filter }}
CHECK_MODE: ${{ inputs.check_mode }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
kayobe_config_branch: ${{ inputs.kayobe_config_branch }}\n
check_mode: ${{ inputs.check_mode }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()
10 changes: 10 additions & 0 deletions .github/workflows/container-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,3 +46,13 @@ jobs:
env:
FILTER: ${{ github.event.inputs.filter }}
DISTROS: ${{ github.event.inputs.distros }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
distros: ${{ inputs.distros }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure() && github.event_name == 'push'
13 changes: 13 additions & 0 deletions .github/workflows/container-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,16 @@ jobs:
DISTROS: ${{ github.event.inputs.distros }}
SYNC_OLD_IMAGES: ${{ github.event.inputs.sync-old-images }}
SYNC_NEW_IMAGES: ${{ github.event.inputs.sync-new-images }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
distros: ${{ inputs.distros }}\n
sync-old-images: ${{ inputs.sync-old-images }}\n
sync-new-images: ${{ inputs.sync-new-images }}\n
sync-test-pulp: ${{ inputs.sync-test-pulp }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()
7 changes: 7 additions & 0 deletions .github/workflows/docs-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,10 @@ jobs:
python-version: 3.x
- run: pip install -r docs-requirements.txt
- run: mkdocs gh-deploy --force

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()
11 changes: 11 additions & 0 deletions .github/workflows/package-promote.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,3 +58,14 @@ jobs:
env:
FILTER: ${{ github.event.inputs.filter }}
CHECK_MODE: ${{ inputs.check_mode }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
kayobe_config_branch: ${{ inputs.kayobe_config_branch }}\n
check_mode: ${{ inputs.check_mode }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()
24 changes: 24 additions & 0 deletions .github/workflows/package-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,18 @@ jobs:
FILTER: ${{ inputs.filter }}
PACKAGE_SYNC_GROUP: ${{ inputs.package_sync_group }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
sync_ark: ${{ inputs.sync_ark }}\n
sync_test: ${{ inputs.sync_test }}\n
package_sync_group: ${{ inputs.package_sync_group }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()

package-sync-test:
name: Sync package repositories in test
runs-on: arc-release-train-runner
Expand Down Expand Up @@ -105,3 +117,15 @@ jobs:
env:
FILTER: ${{ inputs.filter }}
PACKAGE_SYNC_GROUP: ${{ inputs.package_sync_group }}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
inputs: >-
filter: ${{ inputs.filter }}\n
sync_ark: ${{ inputs.sync_ark }}\n
sync_test: ${{ inputs.sync_test }}\n
package_sync_group: ${{ inputs.package_sync_group }}\n
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure()
7 changes: 7 additions & 0 deletions .github/workflows/source-repo-sync.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,10 @@ jobs:
env:
ANSIBLE_FORCE_COLOR: True
GITHUB_TOKEN: ${{secrets.repository_configuration_token}}

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure() && github.event_name == 'push'
7 changes: 7 additions & 0 deletions .github/workflows/terraform-github.yml
Original file line number Diff line number Diff line change
Expand Up @@ -115,3 +115,10 @@ jobs:
- name: Terraform Apply
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -auto-approve -input=false

- name: Send message to Slack via Workflow Builder
uses: ./.github/actions/slack-alert
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel-id: ${{ vars.SLACK_CHANNEL_ID }}
if: failure() && github.ref == 'refs/heads/main' && github.event_name == 'push'
16 changes: 16 additions & 0 deletions docs/usage/notifications.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Notifications

Much of the functionality of StackHPC Release Train is built around GitHub Actions workflows.
Some of these are triggered automatically based on an event such as pushing to a branch in a GitHub repository.
Others are triggered manually, such as using a "workflow dispatch" from GitHub's web UI or API.

Failure of a manually triggered workflow will result in an email being sent to the user who triggered the workflow.
Failure of an automatically triggered workflow will result in an email being sent to the user who *created* the workflow file.
This is not ideal, and makes that person a bottleneck and single point of failure.
To make failures of automatically triggered workflows more visible, notifications are sent to the `#release-train-alerts` Slack channel.

These notifications are implemented in the [slack-alert](https://github.com/stackhpc/stackhpc-release-train/tree/main/.github/actions/slack-alert/) GitHub action.
The `slack-alert` action uses the "workflow builder" approach described in [slack-github-action](https://github.com/slackapi/slack-github-action/).
Slack's [workflow builder](https://slack.com/intl/en-gb/help/articles/360035692513-Guide-to-Slack-Workflow-Builder) feature allows for flexible integration of Slack with various other services, based on various events.
The [Release train status](https://slack.com/shortcuts/Ft07L987AQ91/1f20fd53512385abf199c9357071cb02) workflow has a webhook URL event trigger, with a single action that sends a message to the `#release-train-alerts` Slack channel.
The Slack webhook URL is set in the `SLACK_WEBHOOK_URL` GitHub Actions secret, and the `#release-train-alerts` channel ID is set in the `SLACK_CHANNEL_ID` GitHub Actions variable.
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ nav:
Access control: usage/access.md
Source code CI: usage/source-code-ci.md
GitHub Organisation Management: usage/github-organisation-management.md
Notifications: usage/notifications.md
- Operations:
Ark: operations/ark.md
Test Pulp: operations/test-pulp.md
Expand Down

0 comments on commit f4114ae

Please sign in to comment.