8 Commits
Author SHA1 Message Date
funkpower d55486977d release: staging cannot create a package that has never existed
The registry answers POST /-/stage/package with a 404 for a name it has not
seen, so the first release of a new name cannot be staged at all — no token
scope changes that. The step now says so and lets the release stand rather
than failing after PyPI has already published.

The first version goes out by hand with 2FA; every one after it stages from
here.
2026-09-21 08:45:50 -04:00
funkpower fefb7cc26c release: bring binaryen ourselves
wasm-pack downloads binaryen to get wasm-opt, and that download fails on this
runner while the same URL fetched with curl succeeds. wasm-pack uses a
wasm-opt already on PATH when it finds one, so the archive is fetched here
and put there.

Turning wasm-opt off instead would have been the smaller change and the
wrong one: the metadata in crates/bindings/Cargo.toml names the WebAssembly
features to keep the optimisation rather than skip it, and a release that
silently shipped an unoptimised module would be the first thing anyone
downloaded.
2026-09-21 08:30:11 -04:00
funkpower 699f7bfb1c release on a tag, through the forge
Publishing by hand needs a laptop with two credentials on it, and gets the
gate only if whoever ran it remembered. This runs the same `check.sh` every
push runs, then builds and uploads — and refuses at the first step if the tag
and the workspace version disagree, because a release tagged v0.3.0 that
publishes 0.2.0 cannot be undone: PyPI will not reuse a version even after it
is yanked.

Wheels are cross-compiled with zig for x86_64 and aarch64 against an older
glibc than the build image ships, so they are not silently pinned to
bookworm's, and an sdist covers everything else.

PyPI is uploaded directly. npm is only staged: npm is withdrawing direct
publish from tokens that bypass 2FA, and its trusted publishing is OIDC
against GitHub and GitLab, which this forge is neither. So the runner does
the part a token may do, and a maintainer approves the tarball with 2FA.
A missing NPM_TOKEN is a warning rather than a failure, so a release can go
to PyPI while the npm credential is still being sorted out.
2026-09-21 08:22:38 -04:00
funkpower 48600bd90c bindings: a C ABI and an npm package alongside the wheel 2026-09-19 18:40:08 -04:00
funkpower e811a4d724 ci: authenticate the clone; the repository is private 2026-09-19 17:30:58 -04:00
funkpower 3a7dea7d95 ci: the image the runner already pulls 2026-09-19 17:17:37 -04:00
funkpower ce14545553 ci: ask for the label the runner actually serves 2026-09-19 17:14:10 -04:00
funkpower 6c2f5352a0 one gate: check.sh, run locally and by the workflow 2026-09-19 11:07:52 -04:00