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@v2
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@v2
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@v2
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 |