You're viewing an older version of this GitHub Action. Do you want to see the latest version instead?
GitHub Action
Slack Deploy Pipeline Notifications
v1.4.0
Post GitHub Action deploy workflow progress notifications to Slack.
- Posts summary message at beginning of the deploy workflow, surfacing commit message and author
- Maps GitHub commit author to Slack user by full name, mentioning them in the summary message
- Threads intermediate stage completions, sending unexpected failures back to the channel
- Updates summary message duration at conclusion of the workflow
- Supports
pull_request
,push
,release
,schedule
, andworkflow_dispatch
event types
- Create a Slack App for your workspace
- Under OAuth & Permissions, add two Bot Token Scopes:
chat:write
to post messageschat:write.customize
to customize messages with GitHub commit authorusers:read
to map GitHub user to Slack user
- Install the app to your workspace
- Copy the app's Bot User OAuth Token from the OAuth & Permissions page
- Create a GitHub secret with this token, named
SLACK_DEPLOY_BOT_TOKEN
- Invite the bot user into the Slack channel you will post messages to (
/invite @bot_user_name
) - Click the Slack channel name in the header, and copy its Channel ID from the bottom of the dialog
name: Deploy
on:
push:
branches:
- main
# 1. Configure required environment variables
env:
SLACK_DEPLOY_BOT_TOKEN: ${{ secrets.SLACK_DEPLOY_BOT_TOKEN }}
SLACK_DEPLOY_CHANNEL: 'C040YVCUDRR' # replace with your Slack Channel ID
jobs:
staging:
runs-on: ubuntu-latest
outputs:
slack_ts: ${{ steps.slack.outputs.ts }}
steps:
# 2. Post summary message at the beginning of your workflow
- name: Post to Slack
uses: Fieldguide/action-slack-deploy-pipeline@v1
id: slack
- name: Deploy to staging
run: sleep 10 # replace with your deploy steps
# 3. Post threaded stage updates throughout
- name: Post to Slack
uses: Fieldguide/action-slack-deploy-pipeline@v1
if: always()
with:
thread_ts: ${{ steps.slack.outputs.ts }}
production:
needs:
- staging
runs-on: ubuntu-latest
steps:
- name: Deploy to production
run: sleep 5 # replace with your deploy steps
# 4. Post last "conclusion" stage
- name: Post to Slack
uses: Fieldguide/action-slack-deploy-pipeline@v1
if: always()
with:
thread_ts: ${{ needs.staging.outputs.slack_ts }}
conclusion: true
- Configure required
SLACK_DEPLOY_BOT_TOKEN
andSLACK_DEPLOY_CHANNEL
environment variables. - Use this action at the beginning of your workflow to post a "Deploying" message in your configured channel.
- As your workflow progresses, use this action with the
thread_ts
input to post threaded replies. - Denote the last step with the
conclusion
input to update the initial message's status.
Both environment variables are required.
variable | description |
---|---|
SLACK_DEPLOY_BOT_TOKEN |
Slack Bot User OAuth Token |
SLACK_DEPLOY_CHANNEL |
Slack Channel ID |
input | description |
---|---|
thread_ts |
Initial Slack message timestamp ID |
conclusion |
true denotes last stage |
github_token |
Repository GITHUB_TOKEN or personal access token secret; defaults to github.token |
status |
The current status of the job; defaults to job.status |
output | description |
---|---|
ts |
Slack message timestamp ID |