GitHub Actions: scheduled workflow not triggering [2026 fix]

Scheduled workflows fail silently when cron syntax is invalid or workflow file has syntax errors. Fix: validate cron expression and ensure proper YAML indentation in .github/workflows/.

GitHub Actions: Scheduled Workflow Not Triggering – 2am Incident Fix

TL;DR

Cause: Invalid cron syntax or YAML parsing errors in your workflow file prevent the schedule from registering. Fix: Validate your schedule: cron expression using [crontab.guru](https://crontab.guru) and confirm .github/workflows/ file has correct indentation.

---

Real Console Error Messages

Here are the exact errors you'll see when debugging this issue:

``` 1. "Error: The workflow is not valid. .github/workflows/deploy.yml (Line: 5, Col: 3): mapping values are not allowed here"

2. "Warning: Your workflow file is not triggering. The schedule event is not recognized. Check workflow syntax."

3. "fatal: Could not read Username for 'https://github.com': No such device or address (Workflow exists but cron job never fires—symptom of disabled workflows)"

4. "Error on line 12: The workflow does not contain any jobs to execute (schedule: defined but no jobs: block below it)"

5. "ValidationError: schedule contains invalid cron expression '0 0 * * *' in UTC (Less common in 2026, but appears with custom runners)" ```

---

Broken vs. Fixed Code

Problem 1: Invalid Cron Syntax

BROKEN: ```yaml

.github/workflows/nightly-deploy.yml

name: Nightly Deploy on: schedule: - cron: '0 2 * * *' # Missing minute field – should be 5 fields! jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```

FIXED: ```yaml

.github/workflows/nightly-deploy.yml

name: Nightly Deploy on: schedule: - cron: '0 2 * * *' # ✓ Correct: minute hour day-of-month month day-of-week (UTC) jobs: deploy: runs-on: ubuntu-latest steps: - run: echo "Deploying" ```

Why it matters: GitHub Actions requires cron in minute hour day month day-of-week format (all 5 fields). Missing or extra fields cause silent failure—no error in the UI, just no triggers.

---

Problem 2: YAML Indentation Breaking Parser

BROKEN: ```yaml name: Scheduled Job on: schedule: # ❌ Not indented under 'on:' - cron: '30 2 * * 0' jobs: build: runs-on: ubuntu-latest # ❌ Inconsistent indentation steps: - run: npm test ```

FIXED: ```yaml name: Scheduled Job on: schedule: # ✓ Indented 2 spaces under 'on:' - cron: '30 2 * * 0' jobs: build: runs-on: ubuntu-latest # ✓ Consistent 4-space indent steps: - run: npm test ```

Critical detail: GitHub Actions workflow files are YAML-strict. Each level requires exactly 2-space indentation (or 4 for nested arrays). A single space difference causes the entire schedule: block to be ignored.

---

Problem 3: Missing jobs: Block

BROKEN: ```yaml name: Cache Cleanup on: schedule: - cron: '0 3 * * *'

Workflow ends here – no jobs defined!

```

FIXED: ```yaml name: Cache Cleanup on: schedule: - cron: '0 3 * * *' jobs: cleanup: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: echo "Running scheduled cleanup" ```

---

Critical Validation Steps

1. Test cron syntax: Open [crontab.guru](https://crontab.guru), paste your expression (e.g., 0 2 * * *), and confirm it shows your intended time in UTC.

2. Verify file location: File must exist at .github/workflows/filename.yml (case-sensitive). Check it's committed and pushed to your default branch.

3. Check workflow is enabled: GitHub → Settings → Actions → General → verify "Allow all actions and reusable workflows" is selected (or your org's policy allows it).

4. Confirm cron uses UTC: Times in schedule: are always UTC. If you want 2am EST, use cron: '0 7 * * *' (7am UTC = 2am EST winter time).

5. Validate YAML: Use an online YAML validator (e.g., [yamllint.com](https://www.yamllint.com)) to catch indentation before pushing.

---

Still Broken? Check These Too

1. Workflow disabled: GitHub auto-disables workflows that don't run for 60 days. Go to Actions tab → select workflow → "Enable workflow" button (top-right).

2. Default branch mismatch: Schedule only triggers on your repository's default branch (usually main). If you pushed to develop, the workflow won't run. Push to main and wait 5 minutes.

3. GitHub outage or API lag: On rare occasions, GitHub's workflow scheduler has delays. Check [GitHub Status](https://www.githubstatus.com). If your Actions are recent (last 10 minutes), wait 15 minutes before declaring it broken.

---

Related Guides

  • [GitHub Actions: workflow_dispatch not appearing in UI](/?guide=workflow-dispatch-missing)
  • [Debugging GitHub Actions: reading logs from failed jobs](/?guide=actions-logs-debug)
  • ---

    Official Reference

    📖 [GitHub Docs: Scheduled Workflows](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#scheduled-events)

    ---

    Version Note

    As of 2026, GitHub Actions scheduling behavior is stable. However, if you're using GitHub Enterprise Server, check your server's Actions documentation—self-hosted instances may have different cron handling. This guide assumes cloud GitHub.com or recent GH Enterprise.

    ---

    Found a different variation? Drop it in the comments — include your cron expression, error message, and solution so we can expand this guide.

    🔥 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