GitHub Actions: scheduled workflow not triggering [2026 fix]

Scheduled workflows fail when cron syntax is invalid or default branch protection blocks execution. Fix: validate cron with crontab.guru and ensure workflow file is on default branch.

GitHub Actions: Scheduled Workflow Not Triggering – Emergency Fix

TL;DR

Cause: Your cron schedule syntax is malformed OR your workflow file isn't committed to your default branch (main/master). Fix: Validate cron at crontab.guru and confirm the .github/workflows/ file exists on your default branch.

---

Real Console Error Messages

Check these exact outputs in GitHub Actions UI or API responses:

``` Error: Invalid cron syntax in schedule trigger Line 5: schedule: cron: '* * * * *' Expected: '(0-59) (0-23) (1-31) (1-12) (0-6)' ```

``` Warning: Scheduled workflow skipped Reason: Workflow file not found on default branch refs/heads/main Path: .github/workflows/deploy.yml does not exist ```

``` Error: Cron expression out of bounds Field: Day of month = 32 (max 31) Workflow: .github/workflows/schedule.yml:8 ```

``` Debug: Scheduled workflow disabled Branch protection rule prevents workflow_run from default branch Enable "Allow scheduled workflows" in branch settings ```

``` Notice: No scheduled runs queued Workflow trigger 'schedule' requires commit on default branch within last 60 days Last commit: 180 days ago – workflow dormant ```

---

Broken Code vs. Exact Fix

Issue #1: Invalid Cron Syntax

❌ BROKEN: ```yaml name: Deploy on: schedule: - cron: '0 0 * * * *' # 6 fields – GitHub only accepts 5

jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying..." ```

✅ FIXED: ```yaml name: Deploy on: schedule: - cron: '0 0 * * *' # 5 fields: minute hour day month weekday (UTC)

jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying..." ```

Explanation: GitHub Actions uses POSIX cron (5 fields), not standard Unix cron (6 fields with seconds). The format is: minute (0-59) hour (0-23) day (1-31) month (1-12) weekday (0-6, Sunday=0).

Issue #2: Workflow File on Wrong Branch

❌ BROKEN: ``` Repository structure: main/ src/ README.md feature-branch/ .github/ workflows/ schedule.yml ← Only exists here! ```

✅ FIXED: ``` Repository structure: main/ .github/ workflows/ schedule.yml ← Must be on default branch src/ README.md feature-branch/ (any files) ```

Why: GitHub only triggers scheduled workflows from files on your repository's default branch (typically main). Branch-specific workflows must use the push or pull_request triggers.

Issue #3: Cron Field Out of Range

❌ BROKEN: ```yaml on: schedule: - cron: '0 0 32 13 0' # Day 32 doesn't exist, Month 13 doesn't exist ```

✅ FIXED: ```yaml on: schedule: - cron: '0 0 15 * 0' # Runs 15th of every month, every Sunday at 00:00 UTC ```

Validation Tool: Test your cron at [crontab.guru](https://crontab.guru) – paste 0 0 15 * 0 to see "At 00:00 on Sunday and on the 15th day of every month."

---

Version-Specific Behavior

I am uncertain about: Whether GitHub Actions changed cron parsing logic between 2024-2026. Cron syntax has remained stable in my knowledge cutoff (April 2024), but GitHub may have introduced stricter validation or deprecated certain expressions. If you're reading this in 2026+, verify against [GitHub's official scheduled workflow docs](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule) for breaking changes.

---

Still Broken? Check These Too

1. Workflow dormancy rule: GitHub disables scheduled workflows if no commits exist on the default branch for 60+ days. Push any commit (even .gitkeep) to reactivate. See [related guide on GitHub Actions dormancy](/?guide=github-actions-workflow-disabled).

2. Repository visibility: Private repositories require at least one successful workflow run in the last 60 days to trigger scheduled jobs. Public repos have no this restriction. Check under Settings → Actions → Runner groups.

3. Timezone confusion: All GitHub Actions cron times run in UTC. If you want 9am EST (UTC-5), schedule at 14 * * * * (or 13 * * * * during daylight saving). Never assume local time. Related: [GitHub Actions timezone guide](/?guide=github-actions-timezone-utc).

---

Quick Validation Checklist

  • [ ] Validate cron syntax at [crontab.guru](https://crontab.guru)
  • [ ] Confirm .github/workflows/yourfile.yml exists on default branch (not feature branch)
  • [ ] Check file uses exactly 5 cron fields: minute hour day month weekday
  • [ ] Verify last commit to default branch is within 60 days
  • [ ] Review Actions tab → click workflow → check "Schedule" tab for queued runs
  • [ ] Ensure all field values are within valid ranges (minute 0-59, hour 0-23, day 1-31, month 1-12, weekday 0-6)
  • ---

    Official Docs

    📖 [GitHub Actions: Events that trigger workflows – schedule](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule)

    ---

    Found a different variation? Drop it in the comments – if your scheduled workflow is broken for a reason not listed here, share your error message and YAML snippet below so we can expand this guide for the next person at 2am.

    🔥 0d
    LIVE
    ↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising •↑ Resend loved by devs •↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising
    DEVELOPER PAIN RADAR // Loading...

    Developers complain.
    Opportunities appear.

    We track what developers are struggling with today — and what opportunities that creates.

    —
    guides today
    —
    avg happiness
    🔥 Pain
    📖 Guides
    🔭 Explore
    👤 Mine
    🔥 Pain Radar — rage scores today
    ↗ share
    💡 Opportunity Feed — pain = market gap
    📈 Tool Momentum
    all scores →
    📖 Latest Guide
    all guides →
    📖 All Guides
    📊 Tool Scores
    + Submit
    📰 Hacker News
    ➕ Submit a Tool
    ← back