GitHub Actions conditional job skipped but required check stays pending in branch protection
A required status check must report success to merge. A job skipped by an if-condition does not report success - it reports skipped - so branch protection treats the required check as not satisfied and the PR is blocked.
What this error means
A PR is blocked from merging because a required check never reports success; the job was skipped by an if-condition.
Required check "build" is expected but the job was skipped.
Merging is blocked: required status check has not reported a successful conclusion.Common causes
Skipped does not equal success
Branch protection requires a successful conclusion; skipped does not count.
Required check applied to a sometimes-skipped job
Marking a path-filtered job as required blocks PRs that legitimately skip it.
How to fix it
Add a status-reporting fallback job
- Create a small always-run job that depends on the conditional one and reports success when it is skipped.
- Make that fallback job the required check instead.
gate:
needs: build
if: ${{ always() }}
runs-on: latchkey-small
steps:
- run: |
if [ "${{ needs.build.result }}" = "failure" ]; then exit 1; fiAvoid skipping required jobs
- Move the conditional logic inside the job so it always runs and exits 0 when there is nothing to do.
- Keep the required check able to report success.
How to prevent it
- Do not mark sometimes-skipped jobs as required directly.
- Use an always() gate job to translate skipped into success.