diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 30b1cf62..2b33d6bf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,6 +31,24 @@ env: # So: one job, on the machine that exists, building for the machine that exists. # If a second architecture is ever wanted here it needs a second RUNNER, not a # second matrix row. +# +# ── The toolchain is PINNED, in three places, deliberately ─────────────────── +# +# All three jobs used `dtolnay/rust-toolchain@stable`, which resolves to whatever +# stable is on the day the job runs. A lint gate that floats is not a gate: the +# same tree goes green or red depending on the date, and this repo has already +# produced a disagreement between two people reading the same commit (#15). +# `collapsible_else_if` is the example — `warn` on 1.92.0, `allow`-by-default +# pedantic on 1.98.1, so a clean local run and a red CI run were both correct. +# +# `1.98.1` is the version run 206 resolved, and `docker/ci/Dockerfile` pins the +# same one, so `docker/ci/run cargo clippy …` on a desktop is a true stand-in for +# this workflow rather than an approximation of it. +# +# To bump: change all three `dtolnay/rust-toolchain@` refs here AND the `FROM +# rust:-bookworm` in `docker/ci/Dockerfile` in one commit, so the two +# can never drift apart silently. A bump is a change to the gate and belongs in +# its own PR, where the new lints it turns on are the diff. jobs: # ── Native build, on the one runner there is ──────────────────────────────── @@ -42,13 +60,15 @@ jobs: - uses: actions/checkout@v4 - name: Install Rust toolchain - # `stable` installs a MINIMAL profile: rustc, cargo, rust-std and no + # Pinned — see the toolchain note at the top of this file. + # + # This action installs a MINIMAL profile: rustc, cargo, rust-std and no # more. Components have to be named. Without this line the Clippy step # below dies on "'cargo-clippy' is not installed for the toolchain # 'stable-aarch64-unknown-linux-gnu'" — which is not a lint result, it # is the step never having run. The `fmt` job below always got this # right; this one never did. - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@1.98.1 with: components: clippy @@ -78,7 +98,7 @@ jobs: run: cargo test --workspace # The tally above cannot tell you what it verified. `cargo test` reports - # the same 207/0/14 whether the disc corpus was exercised or entirely + # the same count whether the disc corpus was exercised or entirely # absent -- a gated suite that skips still counts as passed, and the # `ignored` column is a static count of `#[ignore]` attributes that cannot # move at runtime. Issue #16. This prints what the run ACTUALLY had, from @@ -114,7 +134,7 @@ jobs: - uses: actions/checkout@v4 - name: Install Rust toolchain + WASM target - uses: dtolnay/rust-toolchain@stable + uses: dtolnay/rust-toolchain@1.98.1 with: targets: wasm32-unknown-unknown @@ -161,7 +181,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@1.98.1 with: components: rustfmt - run: cargo fmt --all -- --check