Because somebody should yell at you when your master build breaks.
howl is a tool that sends messages to Slack or Discord when your default
branch build fails, typically on main or master. It is designed to be
triggered on your CI (continuous integration) system when a failure occurs on
your default branch. You can use it as a GitHub Action or as a standalone
program, which can be installed with Hermit.
Set up a GitHub secret called SLACK_WEBHOOK_URL with your
Slack Webhook URL, for example
https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
To use a channel other than the default channel set up in the Slack App bound
to the webhook, set the SLACK_CHANNEL environment variable, for example
export SLACK_CHANNEL=C0000000000
For a more customized message or @-mentions, set the SLACK_TEXT environment
variable, for example
export SLACK_TEXT="<!here> 🚒"
Set up a GitHub secret called DISCORD_WEBHOOK_URL with your
Discord Webhook URL for the target discord channel, for example
https://discord.com/api/webhooks/1000000000000000000/XXXXXXXX-xxxxxxxxxxxxxxxxx
For a more customized message or @-mentions, set the DISCORD_TEXT environment
variable, for example
export DISCORD_TEXT="@here 🚒"
You can test the integration locally with
export SLACK_WEBHOOK_URL=https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
export DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/1000000000000000000/XXXXXXXX-xxxxxxxxxxxxxxxxx'
howl
Use the foxygoat/howl@v2 in you GitHub Actions Workflow that runs on the
default branch, for example:
name: ci
on:
push:
branches: [main]
jobs:
ci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
run: make ci
howl-on-fail:
runs-on: ubuntu-latest
needs: [ci]
if: always() && contains(join(needs.*.result, ','), 'failure')
steps:
- uses: foxygoat/howl@v2
with:
slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }}
slack-channel: C0000000000 # optional; channel ID
slack-text: <!here> # optional; text or @-mention
discord-webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
discord-text: '@here' # optional; text or @-mention