Skip to content

ci: add CI Gate so non-Rust PRs aren't blocked by skipped required checks#349

Merged
silverstein merged 1 commit into
mainfrom
ci/required-check-gate
Jun 24, 2026
Merged

ci: add CI Gate so non-Rust PRs aren't blocked by skipped required checks#349
silverstein merged 1 commit into
mainfrom
ci/required-check-gate

Conversation

@silverstein

Copy link
Copy Markdown
Owner

Problem

Branch protection on main requires these as status-check contexts:

Test (macos-latest), Test (ubuntu-latest), Test (windows-latest), Install CLI (ubuntu-latest), Install CLI (windows-latest), Build CLI (ubuntu-latest, default features), Desktop App Installer (windows-latest), plus Detect changed paths, MCP Server, Agents Skill Sync, Site Release Link Consistency.

The Rust jobs are gated by if: needs.changes.outputs.rust == 'true' to save CI on doc-only changes. On a docs/site/MCP-only PR the path filter skips them, and GitHub treats a required-but-skipped check as unmet, so the PR is permanently BLOCKED. The maintainer can admin-merge (as happened for the docs PR #348); an outside contributor cannot merge a docs PR at all.

Fix

Add one CI Gate job that:

  • needs every job whose check was individually required,
  • runs with if: always() (so it runs even when upstream jobs skip),
  • fails only if any of them is failure or cancelled (via contains(needs.*.result, ...)),
  • passes when the rest are success or skipped.

Net behavior: a Rust PR still gates on green matrix jobs (a real failure makes CI Gate fail); a non-Rust PR is no longer blocked by jobs the path filter correctly skipped.

This PR touches .github/workflows/ci.yml, which is in the rust path filter, so the full matrix runs here and this PR merges through normal protection.

One-time follow-up (maintainer, after merge)

Point branch protection's required status checks for main at CI Gate alone (drop the individual matrix contexts). Until then nothing regresses: the existing required checks still apply, and this PR only adds the gate. Suggested:

gh api -X PATCH repos/silverstein/minutes/branches/main/protection/required_status_checks \
  -f 'strict=false' -f 'contexts[]=CI Gate'

(Verify the exact payload against the current protection settings first.)

Branch protection requires the Rust matrix checks (Test, Install CLI, Build CLI
default features, Desktop App Installer) as contexts. Those jobs are gated by
`needs.changes.outputs.rust == 'true'`, so on a docs/site/MCP-only PR the path
filter skips them, and GitHub treats a required-but-skipped check as unmet,
leaving the PR permanently BLOCKED. The maintainer can admin-merge; an outside
contributor cannot merge at all.

Add a single CI Gate job that depends on every previously-required job, runs
with `if: always()`, and fails only if one of them actually failed or was
cancelled. A skipped result (the filter doing its job) passes the gate. Once
branch protection points at CI Gate as the sole required context, Rust PRs
still gate on green matrix jobs, while non-Rust PRs stop being blocked by
checks that correctly never ran.

Follow-up (one-time, maintainer): set the branch protection required status
checks for main to just CI Gate.
@vercel

vercel Bot commented Jun 24, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
useminutes.app Ready Ready Preview, Comment Jun 24, 2026 10:49pm

@silverstein silverstein merged commit 1e66aec into main Jun 24, 2026
27 of 29 checks passed
@silverstein silverstein deleted the ci/required-check-gate branch June 24, 2026 23:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant