Post GitHub Actions status to Discord as an beautiful embed
- 🍣 Super Easy! Works perfectly out of the box.
- 🍣 OS & Arch-agnostic! Supports Linux (Ubuntu), macOS (Intel, M1) and Windows runners.
- 🍣 Fast! Faster than ones written as Docker container action.
⚠️ If you're reading this document in master branch, please refer to the latest released document here.
- uses: sarisia/actions-status-discord@v1
if: always()
with:
webhook: ${{ secrets.DISCORD_WEBHOOK }}
- 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 }}
- 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
Key | Value | Description |
---|---|---|
DISCORD_WEBHOOK | Discord webhook endpoind like:https://discordapp.com/api/webhooks/... |
You can provide webhook via inputs either. DO NOT APPEND /github SUFFIX! |
Key | Required | Value | Default | Description |
---|---|---|---|---|
webhook | No | String | env.DISCORD_WEBHOOK |
Discord webhook endpoind like:https://discordapp.com/api/webhooks/... This overrides env.DISCORD_WEBHOOK .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 |
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 |
Show deprecated
Key | Required | Value | Default | Description |
---|---|---|---|---|
job | No | String | Deprecated. Will be removed in v2 Job name included in message title. Same as title input. |
Key | Description |
---|---|
payload | Discord webhook payload. See Full payload control |
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
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.
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
.
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
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.
As Guilded supports Discord Webhooks API, you can use Guilded webhook endpoint in the same way as Discord webhook.
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
Do not append /github
suffix to your webhook URL. See Inputs section.
Feel free to ask in Discussions, or report bugs in Issues!