didrun · checked
Why isn't my GitHub Actions schedule running?
Four things stop a GitHub Actions schedule, and GitHub alerts you to none of them. Under load the run is delayed, or dropped outright. Or the workflow file is not on the default branch. Or the workflow was disabled, which happens on its own after 60 days without activity in a public repo. Or the cron line means a different time from the one you meant. npx --allow-git=root github:agentwares/didrun reads the repo's run history and tells you which, workflow by workflow.
The four causes, and how to check each by hand
| Cause | What GitHub documents | Check | Fix |
|---|---|---|---|
| Delayed or dropped under load | Scheduled runs wait when Actions is busy, and GitHub names the start of every hour as a busy time. Under enough load, queued jobs are dropped. | gh run list --workflow nightly.yml --event schedule --limit 20 and compare each run's start with the cron line. A dropped run is a gap. | Move the minute off :00: 17 3 * * * instead of 0 3 * * *. |
| Not on the default branch | A schedule runs only from the workflow file on the default branch. | gh repo view --json defaultBranchRef, then check that the file there has the schedule block. | Merge the workflow into the default branch. |
| Disabled | In a public repository, scheduled workflows are turned off after 60 days without activity. Forks start with them off, and anyone can turn one off by hand. | gh workflow list --all shows each workflow's state, e.g. disabled_inactivity. | gh workflow enable nightly.yml. Details: disabled after 60 days. |
| Not the time you think | A line runs in UTC unless it sets timezone (an IANA name). The shortest interval is every 5 minutes. In a time zone with daylight saving, a time in the skipped hour runs at the next valid time. | Read the line in UTC, or add the zone you meant. | timezone: "America/New_York" under the cron line. |
How late is normal?
GitHub publishes no number. In its community forum, the thread on scheduled-workflow delays has 84 upvotes, with delays reported from about 20 minutes to over 10 hours. A newer thread from 27 August 2026 reports schedules that created no run at all for days.
On 9 October 2026, read without a token, both of actions/stale's own Sunday 03:00 UTC schedules had run on 4 October, but 1 h 4 min and 1 h 18 min late. didrun counts a run as late after 30 minutes; --late changes that.
What the check prints for one workflow
Nightly backup · .github/workflows/backup.yml
schedule 0 3 * * * (UTC)
runs due 7: 6 ran, 1 late, 1 missed; 1 failed, 1 did nothing
missed Sun 4 Oct 03:00 UTC no run was created
did nothing Mon 5 Oct 03:00 UTC green in 6 s; its usual success takes 4 min 8 s
late Tue 6 Oct 03:00 UTC the run was created 2 h 17 min late
failed Thu 8 Oct 03:00 UTC the run failed after 1 min 30 s
last run Fri 9 Oct 03:04 UTC, success
next due Sat 10 Oct 03:00 UTC
fix GitHub delays and drops scheduled runs under high load, which includes the start of
every hour: move the minute off :00 (e.g. 17 instead of 0)
open the green runs that were short: usually every job or step was skipped by an
`if:`, or the job found nothing to do and exited 0A missed run, a late one, a failure, and a green run that took 6 seconds when its usual success takes 4 minutes. That last one did nothing, and GitHub shows it with the same green tick as the rest.
Check a repo
In a clone of the repo, or with its name after the command:
$ npx --allow-git=root github:agentwares/didrunRun it in a clone, or name the repo. It reads GitHub's own record with your token (GITHUB_TOKEN, GH_TOKEN or the GitHub CLI's login), and with none it reads public repos. Its only requests are GETs to GitHub's API; the token is never printed or stored. No account, no change to your repo. Free and MIT licensed.
An hourly watch for scheduled runs is not built.
didrun tells you what happened when you ask. A watch would ask for you every hour, from outside GitHub's scheduler, and email you when a scheduled run is late, missed, or green with nothing done, with no change to your repo. It does not exist yet: agentcheck's free hourly watch covers MCP servers only today.
I would pay for an hourly watch of scheduled runs
The click is counted, and nothing else is sent: no form, no email, no cookie. There is no price yet and nothing is charged.
Sources
- GitHub Docs: Events that trigger workflows, schedule — read 9 October 2026: delays under high load, including the start of every hour; dropped jobs; the default branch; 60 days without activity in a public repository
- GitHub Docs: Workflow syntax, on.schedule — read 9 October 2026: UTC by default, an IANA timezone per line, every 5 minutes at the shortest
- GitHub Docs: Disabling and enabling a workflow — read 9 October 2026: gh workflow enable, and forks start with scheduled workflows disabled
- GitHub REST API: workflow runs — read 9 October 2026: runs filtered by event and created date; public repositories readable without a token
- GitHub community #156282, Unexpected delay in scheduled GitHub Actions workflows using cron — opened 10 April 2025; 84 upvotes and 40 comments on 9 October 2026, with delays reported from about 20 minutes to over 10 hours
- GitHub community #206019, Scheduled (cron) workflows stopped firing — opened 27 August 2026: no run created at all since 26 August; 17 upvotes and 14 comments, and no answer from GitHub staff, on 9 October 2026