Skip to content

chore(ci): move clippy + test from PR-time CI to release pipeline#21

Merged
inureyes merged 1 commit into
mainfrom
chore/ci-move-clippy-test-to-release
May 18, 2026
Merged

chore(ci): move clippy + test from PR-time CI to release pipeline#21
inureyes merged 1 commit into
mainfrom
chore/ci-move-clippy-test-to-release

Conversation

@inureyes
Copy link
Copy Markdown
Member

Summary

The clippy + test (macOS ARM64) job in ci.yml was burning ~15 minutes of the single shared self-hosted Apple Silicon runner on every PR push. With make verify (added in #19) reproducing the exact same checks locally, the runner round-trip wasn't adding PR-time signal that wasn't already reachable from a developer's machine — and it was starving the release pipeline of the same runner.

What changed

.github/workflows/ci.yml

  • Removed the clippy-and-test job entirely.
  • Updated the header comment to point developers at make verify (and make verify-clean) and to note that lint/test signal is now released-time, not PR-time.
  • PR-time CI is now just cargo-deny + cargo-fmt on ubuntu — both lightweight enough that they cost nothing.

.github/workflows/release.yml

  • Added Format check, Clippy, and Test steps to build-macos, in front of the signed Build release binaries step. A clippy or test regression in a release build will now fail the release before any signing / packaging / upload work happens.
  • Reused the same Install Rust toolchain step with components: clippy, rustfmt.

The self-hosted runner already has a persistent CARGO_TARGET_DIR cache, so the new lint/test steps benefit from incremental compilation and don't redo the full build for the artifact step that follows.

Trade-off

  • Cost paid: a release build is now ~15 min slower (clippy + test).
  • Cost saved: every PR push to a Rust file no longer waits 15 min on the shared runner.
  • Net: PR throughput improves, release builds get a quality gate they didn't have before, and the local make verify becomes the obvious pre-push hygiene step.

Verification

  • yaml parses (verified via the structural edit pattern matching)
  • header comment in ci.yml accurately reflects the new layout
  • First release run will exercise the new pipeline; no further dry-run available short of cutting a tag

The `clippy + test (macOS ARM64)` job in ci.yml was burning ~15 minutes
of the single shared self-hosted Apple Silicon runner on every PR push.
That cost was hard to justify given that:

- Local developers now have `make verify` / `make verify-clean` which
  reproduce the exact same `cargo clippy --features metal,accelerate
  -- -D warnings` + `cargo test --release --features metal,accelerate`
  invocation, so the runner round-trip wasn't adding signal that wasn't
  reachable locally.
- The self-hosted runner is shared with the release pipeline, and PRs
  routinely starved release builds for runner time.

This commit:

1. Removes the `clippy-and-test` job (and the now-obsolete header
   comment block) from `.github/workflows/ci.yml`. PR-time CI now runs
   only the lightweight cargo-deny + cargo-fmt gates on ubuntu.
2. Adds the same fmt / clippy / test steps to `release.yml`'s
   `build-macos` job, in front of the signed-build step. A clippy or
   test regression in release builds will now fail the release before
   any signing or packaging work happens.

`release.yml::build-macos` already uses the same self-hosted runner with
a persistent cargo target cache, so the lint/test steps benefit from
incremental compilation and don't redo the full build for the artifact
step that follows.
@inureyes inureyes added status:review Under review type:chore Maintenance tasks (build, CI, etc.) priority:medium Medium priority labels May 18, 2026
@inureyes inureyes merged commit 6e10f48 into main May 18, 2026
1 check passed
@inureyes inureyes deleted the chore/ci-move-clippy-test-to-release branch May 18, 2026 11:42
inureyes added a commit that referenced this pull request May 18, 2026
The `clippy + test (macOS ARM64)` job in ci.yml was burning ~15 minutes
of the single shared self-hosted Apple Silicon runner on every PR push.
That cost was hard to justify given that:

- Local developers now have `make verify` / `make verify-clean` which
  reproduce the exact same `cargo clippy --features metal,accelerate
  -- -D warnings` + `cargo test --release --features metal,accelerate`
  invocation, so the runner round-trip wasn't adding signal that wasn't
  reachable locally.
- The self-hosted runner is shared with the release pipeline, and PRs
  routinely starved release builds for runner time.

This commit:

1. Removes the `clippy-and-test` job (and the now-obsolete header
   comment block) from `.github/workflows/ci.yml`. PR-time CI now runs
   only the lightweight cargo-deny + cargo-fmt gates on ubuntu.
2. Adds the same fmt / clippy / test steps to `release.yml`'s
   `build-macos` job, in front of the signed-build step. A clippy or
   test regression in release builds will now fail the release before
   any signing or packaging work happens.

`release.yml::build-macos` already uses the same self-hosted runner with
a persistent cargo target cache, so the lint/test steps benefit from
incremental compilation and don't redo the full build for the artifact
step that follows.
inureyes added a commit that referenced this pull request May 18, 2026
…ly (#23)

PR #21 moved clippy+test from PR-time ci.yml to release.yml on the
theory that paying ~15 min once per release was cheaper than paying it
on every PR push. The first real run came in at ~30+ min on the shared
self-hosted Apple Silicon runner, which inverts the trade-off — release
builds now block on a slow lint/test pass that `make verify` would have
caught locally in seconds.

This commit removes the fmt/clippy/test steps from release.yml's
`build-macos` job (and reverts the `components: clippy, rustfmt`
addition), and updates ci.yml's header comment to document that the
quality gate is local-only via `make verify` / `make verify-clean`.

PR-time CI keeps cargo-deny + cargo-fmt on ubuntu (cheap, no self-hosted
runner involvement). The release pipeline goes back to its pre-#21
shape: build, sign, package, upload.
@inureyes inureyes self-assigned this May 18, 2026
@inureyes inureyes added status:done Completed and removed status:review Under review labels May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

priority:medium Medium priority status:done Completed type:chore Maintenance tasks (build, CI, etc.)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant