Skip to content

Commit a3b0ad2

Browse files
author
Guillaume Lessard
committed
docs: record the four release-pipeline blockers and their fixes
release-build.yml had never executed, so none of these were visible: the publish job shipped an unbuildable sdist, the smoke test called a nonexistent function (get_decoder_info) that would have failed all six wheel jobs, RUSTSEC-2026-0204 hard-blocked publish under the strict gate, and the aarch64 and musllinux jobs failed for two unrelated reasons. Also records the tests.yml concurrency group and why release-build.yml deliberately does not get one. MCP server verified while here: 23 Rust tests and 4 Python tests pass, stable over five consecutive runs.
1 parent 3d5dd1d commit a3b0ad2

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,40 @@ has been published. `src/*.rs` is `.gitignore`d, so `git log v0.6.9..HEAD` shows
1212
none of the Rust work recorded here — it is verified by `cargo test` and by
1313
reading the tree.
1414

15+
### Release pipeline — four blockers, found by running it instead of trusting it
16+
`release-build.yml` had never executed. A `workflow_dispatch` dry run with
17+
`publish: false` builds every wheel and runs the strict dependency gate without
18+
uploading anything; doing that surfaced four faults, each of which would have
19+
fired on the first `v0.7.0` tag.
20+
21+
- **The publish job shipped an sdist.** `docs/RELEASING.md` opens with "Wheels
22+
only — never publish an sdist" and explains why: `src/*` is gitignored, so the
23+
tarball carries `Cargo.toml` and `build.rs` but no `.rs` sources, and any
24+
platform without a matching wheel falls back to it and fails on a source
25+
build. The collect step copied `*.tar.gz` into `dist/` anyway. `twine check`
26+
accepts sdists, so nothing in the pipeline objected. Wheels only now, plus
27+
guards that fail the job if a tarball reaches `dist/` or if no wheel does.
28+
- **The smoke test called a function that does not exist.** Every wheel job ran
29+
`from qector_decoder_v3 import get_decoder_info`; that name is absent from the
30+
package and from `expected_symbols.txt`. All six wheels would have failed.
31+
Replaced with a test that decodes: it builds a repetition-code layout, runs
32+
`UnionFindDecoder` and `BlossomDecoder`, and asserts `H @ c == s (mod 2)`, so a
33+
wheel that compiles but decodes wrongly cannot reach PyPI.
34+
- **RUSTSEC-2026-0204** (`crossbeam-epoch` 0.9.18, invalid pointer dereference)
35+
hard-blocks publish under the release gate's `strict: true`. Updated to 0.9.20.
36+
- **aarch64 Linux never built, and musllinux never smoke-tested.** sccache
37+
wrapping the cross-assembler breaks `ring`'s `.S` files (`#error "ARM
38+
assembler must define __ARM_ARCH"`), so sccache is disabled for that one job.
39+
Separately, musllinux built correctly and then failed trying to `pip install`
40+
a musl wheel on a glibc runner; the smoke-test guard excluded aarch64 but not
41+
musllinux. Both are now excluded from smoke-testing, still built and uploaded.
42+
43+
`tests.yml` also gained a concurrency group. Without one, every push spawned a
44+
fresh five-version matrix and superseded runs kept running, so several pushes in
45+
succession starved the release wheels of runners. `release-build.yml`
46+
deliberately does not get one: cancelling a half-finished release is worse than
47+
paying for it to finish.
48+
1549
### GPU — the weighted path measured, and made faster without changing its output
1650
- **Both GPU paths are now measurable through the standard pipeline.**
1751
`sinter_compat._build_matcher` resolves `cuda` / `opencl` (topology-only) and

0 commit comments

Comments
 (0)