- All CI checks pass on
main npm run test:launcherpasses locallybash launcher.sh --release-smokepasses locally on a machine that can launch Electroncargo test --workspace --exclude pumas_rustlerpasses locally (fromrust/)cargo clippy --workspace --exclude pumas_rustler -- -D warningscleancargo auditshows no high/critical vulnerabilities- Local toolchains match the repo pins in
rust-toolchain.toml,.node-version, and.python-version
- Update
CHANGELOG.md: rename[Unreleased]to[X.Y.Z] - YYYY-MM-DD - Add a fresh empty
[Unreleased]section above the new version heading - Update version in
rust/Cargo.toml([workspace.package] version) - Update version in
frontend/package.jsonandelectron/package.json - Commit:
git commit -m "chore(release): prepare vX.Y.Z" - Tag:
git tag vX.Y.Z - Push:
git push && git push --tags - CI creates a draft GitHub Release with artifacts
- Review the draft release — verify all expected artifacts are present
- Publish the release
Run the release-facing verification commands from the repo root:
npm run test:launcher
bash launcher.sh --build-release
bash launcher.sh --release-smoke
cargo test --manifest-path rust/Cargo.toml --workspace --exclude pumas_rustler
npm run -w frontend test:run
npm run -w frontend check:types
npm run -w electron validate| Artifact | Platforms |
|---|---|
pumas-rpc binary |
Linux x86_64, Windows x86_64, macOS ARM |
libpumas_uniffi shared library |
Linux x86_64, Windows x86_64, macOS ARM |
| Electron desktop app | Linux (AppImage, .deb), Windows (.exe), macOS (.dmg) |
checksums-sha256.txt |
All |
Note: pumas-rustler (Erlang NIF) is excluded from CI builds and default
workspace validation because it requires the BEAM runtime to link. Validate it
separately on machines with Erlang/OTP installed.
For local release prep or future CI wiring, package the C# and native binding artifacts with:
./scripts/check-uniffi-surface.sh
./scripts/check-uniffi-csharp-smoke.sh
./scripts/package-uniffi-csharp-artifacts.shThe packaging script writes:
rust/target/bindings-package/artifacts/pumas-csharp-bindings.ziprust/target/bindings-package/artifacts/pumas-library-native-<platform>.ziprust/target/bindings-package/artifacts/checksums-sha256.txt
These are additive release-prep artifacts. If CI is updated to publish them, keep the generated C# package and native package version-matched from the same build.
| File | Field |
|---|---|
rust/Cargo.toml |
[workspace.package] version |
frontend/package.json |
version |
electron/package.json |
version |
| File | Purpose |
|---|---|
rust-toolchain.toml |
Rust compiler and component pin used by local builds and CI |
.node-version |
Node.js version pin used by local builds and CI |
.python-version |
Python version pin for local tooling and Python-side helpers |
All three must be updated together before tagging.