Nyzhi releases are triggered by Git tags and automated through GitHub Actions. A single tag push builds binaries for four platforms, publishes to crates.io and npm, and creates a GitHub release.
Triggering a Release
Push a version tag:
git tag v1.2.9
git push origin v1.2.9
The release workflow triggers on any tag matching v*.
Version Source
The canonical version lives in the workspace manifest:
# Cargo.toml
[workspace.package]
version = "1.2.9"
The workflow strips the v prefix from the tag to derive the publish version.
Pipeline Stages
The release pipeline runs in sequence:
1. Build Matrix
Builds binaries for four platforms:
| Target | Description |
|---|---|
linux-x86_64 | Linux x86_64 |
linux-aarch64 | Linux ARM64 |
darwin-x86_64 | macOS Intel |
darwin-aarch64 | macOS Apple Silicon |
2. Package Artifacts
- Creates tarballs for each platform
- Generates SHA-256 checksums
3. Upload and Release
- Uploads artifacts to the CI release endpoint
- Creates a GitHub release with attached binaries
4. Publish to crates.io
Crates are published in dependency order:
nyzhi-confignyzhi-authnyzhi-indexnyzhi-providernyzhi-corenyzhi-tuinyzhi(CLI)
5. Publish to npm
Platform-specific packages plus an umbrella package:
| Package | Contents |
|---|---|
nyz-darwin-arm64 | macOS Apple Silicon binary |
nyz-darwin-x64 | macOS Intel binary |
nyz-linux-x64 | Linux x86_64 binary |
nyz-linux-arm64 | Linux ARM64 binary |
nyzhi | Umbrella — auto-selects the right platform binary |
The workflow:
- Extracts the platform binary into each package
- Sets the package version to match the tag
- Publishes platform packages
- Updates the umbrella’s
optionalDependencies - Publishes the umbrella package
Pre-Release Checklist
Before tagging a release:
# 1. Run all quality checks
cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
# 2. Verify workspace version is updated
grep '^version' Cargo.toml
# 3. Verify npm package metadata matches
cat npm/nyzhi/package.json | grep version
# 4. Review changelog / release notes
# 5. Tag and push
git tag v1.2.9
git push origin v1.2.9
Required Secrets
The release workflow needs these GitHub repository secrets:
| Secret | Used for |
|---|---|
RACCOON_UPLOAD_SECRET | Artifact upload to release CDN |
CARGO_REGISTRY_TOKEN | Publishing to crates.io |
NPM_TOKEN | Publishing to npm (mapped to NODE_AUTH_TOKEN) |
Next Steps
- Building from Source — local builds and cross-compilation
- Self-Update — how users receive updates