Release
July 8, 2026 ยท View on GitHub
Set the release version once and reuse it:
version=0.25.2
tag=v$version
Checklist
- Update versions and changelogs.
- Bump
rustywind-cli/Cargo.toml. - Bump
rustywind-core/Cargo.tomlandrustywind-vite/Cargo.tomlonly when those crates change. - Keep path dependency versions in sync.
- Update
CHANGELOG.md. - Update
rustywind-core/CHANGELOG.mdwhenrustywind_coreuser-visible behavior changes. - Update npm package versions:
- Bump
cargo xtask npm update-version "$version"
- Verify locally.
just fmt
just clippy
cargo test -p xtask
- Commit the release prep.
git status --short
git add CHANGELOG.md Cargo.lock rustywind-cli/Cargo.toml rustywind-core/Cargo.toml rustywind-core/CHANGELOG.md rustywind-vite/Cargo.toml npm/packages
git commit -m "Release $tag"
git push
Stage only the files that actually changed.
- Publish crates.io packages.
Publish dependency crates first, then the CLI:
cargo publish -p rustywind_core
cargo publish -p rustywind_vite
cargo publish -p rustywind
Skip unchanged crates.
- Tag and push the release.
git tag "$tag"
git push origin "$tag"
Pushing the tag starts .github/workflows/mean_bean_deploy.yml, which creates the GitHub release, uploads binaries, builds Docker images, and publishes npm packages.
- Watch the GitHub release workflow.
gh run list --workflow "Mean Bean Deploy" --limit 3
gh run watch
Wait for all release assets to upload before publishing npm manually. The npm release uses those assets.
- Publish npm if CI did not.
The preferred path is GitHub Actions with npm Trusted Publishing. If publishing locally, make sure you are logged in and then run:
cargo xtask npm bump "$tag"
or:
cargo xtask npm prepare-binaries "$tag"
cargo xtask npm publish
xtask verifies package versions, prepared binary hashes, and the local host binary version before publishing.
- Update the custom Homebrew tap.
Use the tap repo script after the GitHub release assets exist:
cd ../homebrew-taps
./update rustywind
git status --short
git push
- Smoke test installs.
cargo uninstall rustywind || true
npm uninstall -g rustywind || true
brew uninstall rustywind || true
cargo install rustywind --version "$version" --force
which rustywind
rustywind -V
cargo uninstall rustywind || true
npm install -g rustywind@"$version"
which rustywind
rustywind -V
npm uninstall -g rustywind || true
brew update
brew install avencera/tap/rustywind
which rustywind
rustywind -V
Each command should report the release version.