Skip to content

ci: one verification path per change - #300

Merged
pierre-warnier merged 1 commit into
mainfrom
ci/one-verification-path
Sep 7, 2026
Merged

ci: one verification path per change#300
pierre-warnier merged 1 commit into
mainfrom
ci/one-verification-path

Conversation

@pierre-warnier

Copy link
Copy Markdown
Collaborator

The local gates (make check, the Docker matrix, the deployment suite) are where a change is verified. The workflows are the safety net for contributors and the trace check. They were doing three things that only repeated a result already in hand.

No run on every push to main. A squash merge produces exactly the tree of the pull-request tip that just passed, so that run rebuilt a known-green tree. Main is now exercised once a night, which also catches toolchain and base-image drift between merges, and on demand through workflow_dispatch. The README badge follows the default branch, so it reports the nightly run.

A force-push cancels the superseded run. A concurrency group keyed on the pull-request number; scheduled runs are never cancelled.

No dist plan on pull requests. It re-parsed the dist manifest, which the tag-triggered pipeline does anyway, and it fired alongside the CI workflow on every update. pr-run-mode = "skip" in dist-workspace.toml, and release.yml regenerated with dist 0.32.0 (the diff is the one removed trigger line). The static musl archive, the release step that can actually break, is still built by ci.yml on every pull request.

Measured before the change: merging the nine stacked pull requests #291 to #299 fired 48 runs, about 260 runner-minutes, every one on a tree already tested, and queued behind the rest of the organisation.

Checked with actionlint 1.7.7: ci.yml is clean; the remaining findings are pre-existing shellcheck style notes inside the dist-generated release.yml.

Local gates are where a change is verified before it is pushed; the
workflows are the safety net for contributors and the trace check. They
were doing three things that only repeated a result already in hand:

- a run on every push to main. A squash merge produces exactly the tree
  of the pull-request tip that just passed, so this rebuilt a known-green
  tree. Main is now exercised once a night instead, which also catches
  toolchain and base-image drift between merges, and on demand.

- both the old and the new run when a pull request was force-pushed.
  A concurrency group cancels the superseded one; scheduled runs are
  never cancelled.

- `dist plan` on every pull request (release.yml). It re-parsed the dist
  manifest, which the tag-triggered pipeline does anyway, and it fired
  alongside the CI workflow on every update. `pr-run-mode = "skip"` and
  release.yml regenerated with dist 0.32.0. The static musl archive, the
  release step that can actually break, is still built by ci.yml on
  every pull request.

Measured before the change: merging nine stacked pull requests fired 48
runs, about 260 runner-minutes, every one on a tree already tested.
@pierre-warnier
pierre-warnier merged commit c6b65c9 into main Sep 7, 2026
13 checks passed
@pierre-warnier
pierre-warnier deleted the ci/one-verification-path branch September 7, 2026 16:10
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