Release Plan¶
Release artifacts should be built from the same upstream lock:
Rust crate:
nirs4allPython wheel/sdist:
nirs4all-litenpm package:
nirs4allR source package:
nirs4allMATLAB/Octave archive:
nirs4allWASM bundle consumed by
nirs4all-web
Before release:
Pin upstream versions or SHAs in
compat/upstreams.toml.Build each binding from the same lock.
Run upstream binding parity gates.
Run lite cross-language parity gates.
Run equivalent-pipeline checks against full Python
nirs4all.Verify external operator capability levels: metadata-only operators must not be marketed as executable, and executable operators must have parity fixtures.
Publish artifacts and record provenance in the release notes.
Local artifact commands:
make test
make build-python
make build-npm
make build-r
make build-matlab
cargo package -p nirs4all
R CMD build/check, Octave smoke tests, and CRAN/R-universe validation require
R/Octave toolchains. They are part of CI because they may not be available on
every development workstation.
Every CI run uploads the build outputs as artifacts (rust-crate, python-*,
npm-wasm, r-source, and matlab-octave).
Tagged releases are cut by six dedicated workflows — release-python.yml,
release-npm.yml, release-crates.yml, release-r.yml, release-matlab.yml,
release-source.yml. On a non-pre-release tag vX.Y.Z they publish PyPI
nirs4all-lite (OIDC Trusted Publishing, environment pypi), npm nirs4all
(NPM_TOKEN), crates.io nirs4all (CARGO_REGISTRY_TOKEN), and attach the R
tarball, the MATLAB/Octave zip, and the source + SBOM bundle to the Release.
Pre-release tags build/attach but publish to no registry; workflow_dispatch
runs every workflow in dry-run mode. The version source of truth is the Rust
crate manifest, propagated by scripts/bump_version.sh. See
PUBLISHING.md.