Skip to content

Rethink binary distribution for faster bug-fix releases #122

@shinaoka

Description

@shinaoka

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-rs side
  • that workflow runs cargo publish first
  • only if cargo publish succeeds, continue with binary release steps
  • build platform binaries with BinaryBuilder.jl
  • publish artifact tarballs only, not JLLs, for downstream consumption
  • let SparseIR.jl consume 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.jl should 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.io remains the release truth, because the workflow only continues after successful cargo publish
  • the published binary artifacts correspond to the exact published Rust source
  • release latency for urgent bug fixes stays low
  • SparseIR.jl can 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:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions