Awesome
Actions Status Discord
Post GitHub Actions status to Discord as an beautiful embed
- :sushi: Super Easy! Works perfectly out of the box.
- :sushi: OS & Arch-agnostic! Supports Linux (Ubuntu), macOS (Intel, M1) and Windows runners.
- :sushi: Fast! Faster than ones written as Docker container action.
:warning: If you're reading this document in master branch, please refer to the latest released document here.
Usage
Minimum
- uses: sarisia/actions-status-discord@v1
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
Full options
- uses: sarisia/actions-status-discord@v1
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
status: ${{ job.status }}
content: "Hey <@316911818725392384>"
title: "deploy"
description: "Build and deploy to GitHub Pages"
image: ${{ secrets.EMBED_IMAGE }}
color: 0x0000ff
url: "https://github.com/sarisia/actions-status-discord"
username: GitHub Actions
avatar_url: ${{ secrets.AVATAR_URL }}
No detail
- uses: sarisia/actions-status-discord@v1
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
nodetail: true
title: "New version of `software` is ready!"
description: |
Version `${{ github.event.release.tag_name }}`
Click [here](${{ github.event.release.html_url }}) to download!
color: 0xff91a4
For if
parameter, see
GitHub Actions Reference
Configuration
Environment Variables
Key | Value | Description |
---|---|---|
DISCORD_WEBHOOK | Discord webhook endpoind like:<br>https://discordapp.com/api/webhooks/... | You can provide webhook via inputs either.<br>DO NOT APPEND /github SUFFIX! |
Inputs
General customizations
Key | Required | Value | Default | Description |
---|---|---|---|---|
webhook | No | String | env.DISCORD_WEBHOOK | Discord webhook endpoind like:<br>https://discordapp.com/api/webhooks/... <br>This overrides env.DISCORD_WEBHOOK .<br>DO NOT APPEND /github SUFFIX! |
status | No | Success , Failure or Cancelled | ${{ job.status }} | See Document for job context |
content | No | String | Content. Shown as an message outside of the embed. See Mention to user/role | |
title | No | String | ${{ github.workflow}} | String included in embed title. Overrides job input. |
description | No | String | Description included in message | |
image | No | String | Image attached to the message | |
color | No | Hex string like: 0xFFFFFF | Overrides Discord embed color | |
url | No | String | URL to jump when the title is clicked | |
username | No | String | Overrides Discord webhook username | |
avatar_url | No | String | Overrides Discord webhook avatar url |
Advanced usages
Key | Required | Value | Default | Description |
---|---|---|---|---|
nofail | No | true or false | true | This action won't make workflow failed by default. If set to false , this action will set status failed when failed to notify. |
nocontext | No | true or false | false | Set true to suppress GitHub context fields (Repository , Ref , etc). |
noprefix | No | true or false | false | Set true to avoid appending job status (Success: , etc.) to title |
nodetail | No | true or false | false | Set true will set both nocontext and noprefix to true |
notimestamp | No | true or false | false | Set true to avoid appending timestamp |
ack_no_webhook | No | true or false | false | Set true to suppress warnings when no Webhook endpoint is given |
Key | Required | Value | Default | Description |
---|---|---|---|---|
job | No | String | Deprecated. Will be removed in v2<br>Job name included in message title. Same as title input. |
Outputs
Key | Description |
---|---|
payload | Discord webhook payload. See Full payload control |
Tips
Using markdown
Some fields support markdown syntax.
- uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
nodetail: true
title: "New version of `software` is ready!"
description: |
Version `${{ github.event.release.tag_name }}`
Click [here](${{ github.event.release.html_url }}) to download!
color: 0xff91a4
Mention to user/role
Since @mention
inside the embed does not generate ping to users,
you can use content
input to mention users/roles:
- uses: sarisia/actions-status-discord@v1
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
content: "Hey <@316911818725392384>"
See the Discord Developer Docs for available formats.
Trigger multiple webhooks
You can set multiple webhooks separated with EOL (line break, \n
) to Secrets.
For example, set Secrets to:
https://discordapp.com/api/webhooks/...
https://media.guilded.gg/webhooks/...
https://this-is-invalid-webhook-endpoint.invalid/...
will trigger these 3 webhooks simultaneously.
If some of these webhooks are failed, other deliveries will NOT be cancelled.
If the option nofail
is set to false
and any of one fail, the action will set
workflow status to Failure
.
Full payload control
You can modify payload before sending to Discord:
- uses: sarisia/actions-status-discord@v1
if: always()
id: webhook # set id to reference output payload later
with:
ack_no_webhook: true # set this to suppress warning
# you can omit webhook input (or DISCORD_WEBHOOK environment variable)
- run: npm install axios
- uses: actions/github-script@v7
env:
WEBHOOK_PAYLOAD: ${{ steps.webhook.outputs.payload }}
WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK }}
with:
script: |
const axios = require("axios")
const { WEBHOOK_PAYLOAD, WEBHOOK_URL } = process.env
const payload = JSON.parse(WEBHOOK_PAYLOAD)
// modify payload as you like
delete payload.embeds[0].color
// send to Discord
axios.post(WEBHOOK_URL, payload)
See actions/github-script docs
GHES, Gitea and Forgejo
This actions may work with GHES, Gitea and Forgejo, but not tested against yet.
If you have any issues, please let us know in Discussions or Issues.
Guilded webhook support
As Guilded supports Discord Webhooks API, you can use Guilded webhook endpoint in the same way as Discord webhook.
Verifying Artifact Attestations
This action is shipped with Artifact attestations
for action.yml
and lib/index.js
.
You can verify these files with GitHub CLI:
$ gh attestation verify --repo sarisia/actions-status-discord lib/index.js
Loaded digest sha256:4cc20dac6053670b29ff3ae8b9ddeafeed73fe79e5ab31fd8e34b6acd44d30c3 for file://lib/index.js
Loaded 1 attestation from GitHub API
ā Verification succeeded!
sha256:4cc20dac6053670b29ff3ae8b9ddeafeed73fe79e5ab31fd8e34b6acd44d30c3 was attested by:
REPO PREDICATE_TYPE WORKFLOW
sarisia/actions-status-discord https://slsa.dev/provenance/v1 .github/workflows/release.yml@refs/tags/v.1.14.3-pre.0
FAQ
Error: Webhook response: 400: {"sender":["This field is required"]}
Do not append /github
suffix to your webhook URL. See Inputs section.
Questions? Bugs?
Feel free to ask in Discussions, or report bugs in Issues!