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