GitHub Actions Required Check Stuck "Expected - Waiting"
A branch protection rule requires a status check that never runs - because a path filter skipped the workflow or the job was conditionally skipped - so the PR sits forever "Expected - Waiting for status".
What this error means
A pull request shows a required check stuck in a pending "Expected" state and merge is blocked, even though no job is actually running or failing.
Required statuses must pass before merging
Expected - Waiting for status to be reported
build (required)Common causes
Path/branch filter skipped the workflow
When on.paths excludes the changed files, the workflow does not run at all, so a required check from it never reports and stays pending.
A conditionally skipped required job
A job gated by an if condition that evaluates false is skipped. A skipped job does not satisfy a required status check by default.
How to fix it
Add a passthrough job for skipped paths
Provide a lightweight workflow that always reports the same check name as success when the real one is skipped, so the required check is satisfied.
# .github/workflows/ci-skip.yml
on:
pull_request:
paths-ignore: ['src/**']
jobs:
build: # same name as the required check
runs-on: ubuntu-latest
steps: [{ run: 'echo "No source changes; passing"' }]Reconsider what is marked required
- Only mark checks required if they run on every PR that must merge.
- Avoid path filters on workflows whose checks are required, or pair them with a skip job.
- Use job-level if results that report neutral/success rather than skipping required jobs.
How to prevent it
- Pair every path-filtered required check with a passthrough job of the same name.
- Audit branch protection so required checks always report on every PR.
- Avoid conditionally skipping jobs that are wired up as required.