-
Notifications
You must be signed in to change notification settings - Fork 0
Rethink binary distribution for faster bug-fix releases #122
Description
We should adopt a clearer short-term release strategy for SparseIR.jl so that small validated bug fixes can be released immediately, without waiting for a manual Yggdrasil binary update.
Recommended direction
The recommended setup is:
- use a manual release workflow on the
sparse-ir-rsside - that workflow runs
cargo publishfirst - only if
cargo publishsucceeds, continue with binary release steps - build platform binaries with BinaryBuilder.jl
- publish artifact tarballs only, not JLLs, for downstream consumption
- let
SparseIR.jlconsume those published artifacts directly
In other words, the recommended path is not to keep doing manual Yggdrasil updates for every bug fix, and not to make SparseIR.jl build Rust on every user machine as the main strategy. The main recommendation is a GitHub-driven release workflow on the Rust side, gated by successful cargo publish, with BinaryBuilder.jl used to produce distributable binary artifacts.
Motivation
Right now, small fixes in the Rust/C API layer are harder to ship quickly than they should be. Even when a fix is localized and validated, downstream binary distribution still adds too much latency.
A concrete example is the threaded Matsubara fit fix in #120. That kind of fix should be releasable quickly once the Rust side is known to be correct.
How BinaryBuilder.jl fits into the recommendation
The intended role of BinaryBuilder.jl here is narrow and specific: use it as the multi-platform build backend, but do not make JLL generation the main downstream interface.
The important conclusion is that the output we actually want downstream is the set of platform-specific artifact tarballs. In other words:
- BinaryBuilder.jl is used to build release binaries reproducibly across platforms
- the release workflow should publish the resulting binary tarballs as artifacts
SparseIR.jlshould consume those published artifacts directly- generating a full JLL/Yggdrasil-style wrapper is not the recommended path for urgent bug-fix releases
This keeps the useful part of BinaryBuilder.jl (reproducible cross-platform binary builds) while avoiding the operational cost of a full JLL/Yggdrasil workflow for each small fix.
Why this is the recommended option
This recommendation has a few advantages:
crates.ioremains the release truth, because the workflow only continues after successfulcargo publish- the published binary artifacts correspond to the exact published Rust source
- release latency for urgent bug fixes stays low
SparseIR.jlcan stay on an artifact-based consumption model- BinaryBuilder.jl can still be used for multi-platform builds, without requiring a full JLL/Yggdrasil workflow for each fix
Important technical point
This is not only about automation. It is also about dependency control. The release pipeline should make the runtime dependency policy explicit, audit produced binaries in CI, and fail if unexpected shared-library dependencies appear.
Scope of this issue
This issue is about the downstream SparseIR.jl release/distribution strategy and how it should consume Rust-side release artifacts. The upstream Rust-side workflow itself is discussed separately in the linked upstream issue.
Related: