Guides · CI · scheduled workflows
Alert if a GitHub Action never ran
GitHub emails failed runs. It does not email a scheduled workflow that never started. Add a heartbeat step on success. If the ping stops, Gonewatch alerts you.
How it works
1
Create a monitor
Fixed time of day if the workflow is on a cron schedule. Rolling interval if you expect a success after each deploy.
2
Store the URL as a secret
GONEWATCH_URL = the full heartbeat URL. Never commit the token.
3
Ping on success only
A final step with if: success() POSTs the heartbeat. Failures skip it so the miss is visible.
Last step in the workflow
GitHub MarketplaceInstall gonewatch/heartbeat from the GitHub Marketplace. Same POST as curl — the Action is the installable step.
- name: Gonewatch heartbeat
if: success()
uses: gonewatch/heartbeat@v1
with:
url: ${{ secrets.GONEWATCH_URL }}Set GONEWATCH_URL to the full https://www.gonewatch.com/api/heartbeat/… URL from the monitor page. curl still works: curl -fsS -X POST "$GONEWATCH_URL".
Silence is the failure
What this catches
A disabled schedule, a forked repo that lost the cron, Actions minutes exhausted, or a workflow file removed in a merge.
What this is not
Not a replacement for GitHub’s failure emails. Use those for red X’s. Use Gonewatch for jobs that never ran at all.
GitHub Actions questions
Silence versus a failed run.
Doesn't GitHub already email me when a workflow fails?
It emails failures. It does not email a workflow that never started — a disabled schedule, a missed cron, or a repo that stopped running. The heartbeat is for silence.
Where do I put the secret?
Repo or environment secret, for example GONEWATCH_URL, set to the full heartbeat URL from the monitor page. The step should run only on success.
Should I use the GitHub Action or curl?
Same endpoint. Prefer uses: gonewatch/heartbeat@v1 if you already write workflows. curl -fsS -X POST "$GONEWATCH_URL" is equivalent if you already have it.
Fixed time or rolling interval?
If the workflow is on a schedule (weekdays at 6 AM), use fixed time of day. If it runs after every deploy, use a rolling interval that matches how often you expect a success.
More guides
Watch one scheduled workflow
Free plan. One secret, one Action step, email if the schedule goes quiet.
Create a monitor