GitHub Actions Workflow Not Triggering ā Every Cause and Fix (2026)
Your GitHub Actions workflow exists but never runs. Here's every reason a workflow fails to trigger and exactly how to fix each one.
You pushed code. Nothing happened. The workflow exists but GitHub Actions shows no runs. Here's every reason a workflow doesn't trigger and how to fix it.
Quick Diagnosis
First, check the Actions tab in your repo:
- If you see the run but it's failing ā skip to that error
- If the Actions tab shows nothing at all ā the trigger never fired
- If the workflow doesn't appear in the list ā YAML parsing error
Cause 1: Wrong Branch in the Trigger
Symptom: Push to main but workflow only runs on master (or vice versa).
# Your workflow
on:
push:
branches:
- master # ā but your default branch is "main"Fix:
on:
push:
branches:
- main # match your actual branch name
- master # or include bothCheck your default branch: Repo ā Settings ā Branches ā Default branch.
Cause 2: Workflow File Not in the Right Path
GitHub Actions only reads workflow files from .github/workflows/.
ā
.github/workflows/ci.yml
ā .github/workflow/ci.yml (missing 's')
ā github/workflows/ci.yml (missing '.')
ā .github/workflows/ci.yaml # this works too, just be consistent
Fix: Verify exact path:
ls -la .github/workflows/Cause 3: YAML Syntax Error
A syntax error silently breaks the workflow ā GitHub won't run it and won't always alert you clearly.
Common mistakes:
# Wrong indentation
on:
push: # ā should be indented under 'on'
branches:
- main
# Wrong
on: push # string, not mapping
# Right
on:
push:
branches:
- mainFix ā validate YAML locally:
# Install actionlint
brew install actionlint
# or
go install github.com/rhysd/actionlint/cmd/actionlint@latest
actionlint .github/workflows/ci.ymlOr paste your YAML at yamllint.com.
Cause 4: paths Filter Excluding Your Files
on:
push:
branches:
- main
paths:
- 'src/**' # workflow only runs if src/ files changeIf you pushed changes outside src/ (e.g., README, .github/workflows/), the workflow won't trigger.
Fix ā add paths to include or remove the filter:
on:
push:
branches:
- main
paths:
- 'src/**'
- '.github/workflows/**' # also trigger on workflow changesOr remove paths entirely if you don't need file filtering.
Cause 5: GitHub Actions Disabled for the Repo
Check: Repo ā Settings ā Actions ā General ā Actions permissions.
Common scenario: new repo, Actions is set to "Disable Actions".
Fix: Set to "Allow all actions and reusable workflows" (or your preferred policy).
Cause 6: workflow_dispatch Trigger Needs Manual Start
on:
workflow_dispatch: # only triggers via manual button or APIworkflow_dispatch never fires automatically. You have to click Run workflow in the Actions tab, or call the API.
Fix ā add automatic trigger too:
on:
push:
branches:
- main
workflow_dispatch: # keep for manual runs tooCause 7: pull_request Trigger From a Fork
Workflows don't auto-run for PRs from forks by default (security protection).
Check: Actions tab ā look for "Waiting for approval" status.
Fix: A maintainer must click "Approve and run" for first-time contributors. For trusted contributors, you can auto-approve:
Repo ā Settings ā Actions ā General ā "Fork pull request workflows" ā "Require approval for first-time contributors only".
Cause 8: Job if Condition Evaluating False
jobs:
deploy:
if: github.ref == 'refs/heads/production' # only runs on 'production' branchIf you pushed to main, the if condition is false ā job is skipped ā no run appears.
Debug:
jobs:
debug:
runs-on: ubuntu-latest
steps:
- run: echo "Branch is ${{ github.ref }}"Check what github.ref actually contains.
Cause 9: Scheduled Trigger (cron) Not Running
on:
schedule:
- cron: '0 9 * * 1' # Monday 9am UTCKnown GitHub issues with scheduled workflows:
- GitHub throttles or disables scheduled workflows on inactive repos (no pushes in 60 days)
- Busy periods ā GitHub may delay scheduled runs by up to 30 minutes
- Timezone: cron is always UTC, not your local timezone
Fix:
# Re-activate the repo with a small commit
git commit --allow-empty -m "keep workflows active" && git push
# Add workflow_dispatch as fallback
on:
schedule:
- cron: '0 9 * * 1'
workflow_dispatch: # manual trigger to test the schedule logicCause 10: Branch Protection Rules Blocking
Branch protection with "Require status checks" can prevent workflows from even starting in some configurations.
Check: Repo ā Settings ā Branches ā Branch protection rules ā examine required status checks.
Cause 11: concurrency Group Cancelling Runs
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true # cancels previous run when new push happensIf you push rapidly, earlier runs get cancelled. The latest run should still execute ā but check the Actions tab for "Cancelled" status.
Cause 12: Organization-Level Policy Blocking
In GitHub Organizations, admins can restrict which workflows can run.
Check: Organization ā Settings ā Actions ā Policies.
If you're in a company org, your workflow might be blocked by org policy. Contact your GitHub org admin.
Full Debug Workflow
# 1. Check workflow file path
ls -la .github/workflows/
# 2. Validate YAML syntax
actionlint .github/workflows/*.yml
# 3. Add a minimal test workflow
cat > .github/workflows/test-trigger.yml << 'EOF'
name: Test Trigger
on:
push:
branches: ['**'] # all branches
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: echo "Workflow triggered on ${{ github.ref }}"
EOF
git add .github/workflows/test-trigger.yml
git commit -m "test: check workflow trigger"
git push
# 4. Check Actions tab immediately after pushQuick Reference
| Symptom | Likely Cause | Fix |
|---|---|---|
| Nothing in Actions tab | Wrong branch, path filter, disabled | Check trigger branch + paths |
| "Waiting for approval" | Fork PR | Approve in Actions tab |
| Workflow in list but no runs | if: condition false | Debug with echo steps |
| Runs disappearing | concurrency cancel | Check concurrency config |
| Scheduled not running | Inactive repo | Push a commit to re-activate |
| YAML not parsed | Syntax error | Run actionlint |
Resources
- Udemy: GitHub Actions Masterclass ā Complete course on workflows, triggers, and advanced patterns
- KodeKloud CI/CD Path ā Hands-on GitHub Actions labs
Today I Fixed
Short real fixes from production ā posted daily
Stay ahead of the curve
Get the latest DevOps, Kubernetes, AWS, and AI/ML guides delivered straight to your inbox. No spam ā just practical engineering content.
Related Articles
GitHub Actions Cache Not Working ā How to Fix It
Your workflow runs are still slow even with actions/cache. Cache miss every time, cache key conflicts, wrong paths ā here's how to diagnose and fix GitHub Actions caching.
GitHub Actions Docker Push: Permission Denied / Unauthorized Fix (2026)
Getting 'permission denied' or 'unauthorized: authentication required' when pushing Docker images in GitHub Actions? Here are all the causes and fixes.
GitHub Actions Job Timeout ā Every Fix (2026)
Your GitHub Actions job times out after 6 hours or hits a custom timeout limit. Here's every cause ā hung Docker builds, hanging tests, stuck deployments, missing timeout config ā and the exact fix.