Skip to content

ci: gate merging on a single Release Validation summary job#775

Merged
elijahbenizzy merged 2 commits into
mainfrom
ci/drop-release-validation-from-required-checks
May 11, 2026
Merged

ci: gate merging on a single Release Validation summary job#775
elijahbenizzy merged 2 commits into
mainfrom
ci/drop-release-validation-from-required-checks

Conversation

@elijahbenizzy
Copy link
Copy Markdown
Contributor

Summary

Replaces the two matrix-suffixed required checks (Release Validation / build-artifacts, Release Validation / install-and-smoke (3.12)) with a single new required check: Release Validation / summary.

The new summary job sits at the end of release-validation.yml, depends on all the other jobs, and runs with if: always(). It translates upstream job conclusions into one binary verdict:

Upstream build-artifacts Upstream install-and-smoke Summary verdict
success success ✓ pass
skipped (path-filtered docs PR) skipped (path-filtered docs PR) ✓ pass
failure * ✗ fail
* failure ✗ fail

Because the summary job is the only required check, branch protection cares only about that single stable name.

Why this is needed

PRs touching only docs/ or website/ (like #771) were stuck in BLOCKED state. The path filter intentionally skips the heavy validation jobs, but GitHub treats SKIPPED as non-passing for required-status-checks. Commit a655edf2 tried to fix it by adding the check-paths gate; that didn't work because SKIPPED is still SKIPPED.

The if: always() summary job sidesteps the ambiguity — it always produces a definite SUCCESS or FAILURE, never SKIPPED. So branch protection has a stable signal regardless of upstream skip semantics.

What this preserves

Real code PRs still get gated. If build-artifacts or install-and-smoke fails, the summary fails, and the merge button stays disabled.

(Reopens the work from #774, which GitHub wouldn't allow to be reopened after the force-push.)

Test plan

Adds a "summary" job to release-validation.yml that depends on
check-paths, build-artifacts, and install-and-smoke and runs
with if: always(). It translates the upstream conclusions into
a single binary verdict — success/skipped → pass, failure or
cancelled → fail — so the required check has a stable name and
a definite state regardless of whether upstream jobs ran or
were path-filtered out.

In .asf.yaml the required contexts drop from two matrix-suffixed
names ("Release Validation / build-artifacts", "Release Validation
/ install-and-smoke (3.12)") to one: "Release Validation / summary".

Why this is needed:
- PRs that only touch docs/ or website/ trigger check-paths to
  set should_run=false, which skips the heavy jobs.
- GitHub treats SKIPPED jobs as non-passing for required-status-
  checks, so those PRs were stuck in BLOCKED state forever
  (see commit a655edf for the previous attempt that didn't
  work for this exact reason).
- The summary job sidesteps the SKIPPED ambiguity because it
  always runs and always produces a definite SUCCESS or FAILURE.

Real code PRs are unaffected: if any release-validation job
fails, the summary fails, and merging is blocked.
@github-actions github-actions Bot added the area/ci Workflows, build, release scripts label May 11, 2026
Drive-by fix — `f7a1750d` (rename shadowed `format` builtin)
left this file black-non-compliant for line-length=100. Caught
by pre-commit on this branch.
@github-actions github-actions Bot added the area/core Application, State, Graph, Actions label May 11, 2026
@elijahbenizzy elijahbenizzy merged commit 56dcfd4 into main May 11, 2026
27 checks passed
@elijahbenizzy elijahbenizzy deleted the ci/drop-release-validation-from-required-checks branch May 11, 2026 20:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/ci Workflows, build, release scripts area/core Application, State, Graph, Actions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants