Skip to content

sarisia/actions-status-discord

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Repository files navigation

Actions Status Discord

Post GitHub Actions status to Discord as an beautiful embed

image

  • 🍣 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.

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

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!

Inputs

General customizations

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

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

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

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!