Home

Awesome

Actions Status Discord

Post GitHub Actions status to Discord as an beautiful embed

image


: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 }}

image

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 }}

image

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

image

For if parameter, see GitHub Actions Reference

Configuration

Environment Variables

KeyValueDescription
DISCORD_WEBHOOKDiscord 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

KeyRequiredValueDefaultDescription
webhookNoStringenv.DISCORD_WEBHOOKDiscord webhook endpoind like:<br>https://discordapp.com/api/webhooks/...<br>This overrides env.DISCORD_WEBHOOK.<br>DO NOT APPEND /github SUFFIX!
statusNoSuccess, Failure or Cancelled${{ job.status }}See Document for job context
contentNoStringContent. Shown as an message outside of the embed. See Mention to user/role
titleNoString${{ github.workflow}}String included in embed title. Overrides job input.
descriptionNoStringDescription included in message
imageNoStringImage attached to the message
colorNoHex string like: 0xFFFFFFOverrides Discord embed color
urlNoStringURL to jump when the title is clicked
usernameNoStringOverrides Discord webhook username
avatar_urlNoStringOverrides Discord webhook avatar url

Advanced usages

KeyRequiredValueDefaultDescription
nofailNotrue or falsetrueThis action won't make workflow failed by default. If set to false, this action will set status failed when failed to notify.
nocontextNotrue or falsefalseSet true to suppress GitHub context fields (Repository, Ref, etc).
noprefixNotrue or falsefalseSet true to avoid appending job status (Success: , etc.) to title
nodetailNotrue or falsefalseSet true will set both nocontext and noprefix to true
notimestampNotrue or falsefalseSet true to avoid appending timestamp
ack_no_webhookNotrue or falsefalseSet true to suppress warnings when no Webhook endpoint is given
<details> <summary>Show deprecated</summary>
KeyRequiredValueDefaultDescription
jobNoStringDeprecated. Will be removed in v2<br>Job name included in message title. Same as title input.
</details> <!-- ## Migrate to v2 ### input `job` is now `title` `job` input is deprecated and now removed in v2. Just change `job` to `title` in your workflow file to make it work. -->

Outputs

KeyDescription
payloadDiscord 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

image

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!