This document captures the workflow for cutting a release across the Rust core crate and the associated language bindings.
- Choose a new semantic version for the Rust crates (
asherah,asherah-config,asherah-ffi,asherah-node,asherah-py,asherah-java). - Update the version field in each
Cargo.toml. Keep the workspace in sync by adjustingCargo.lockwithcargo update -p <crate>@<version>. - Propagate the version bump to language package manifests:
- Node: update
asherah-node/package.jsonand regenerate lockfiles. - Python: update
asherah-py/pyproject.tomlorsetup.cfgas applicable. - Ruby: update gemspec in
asherah-ruby/. - .NET: update the
.csprojversion inasherah-dotnet/. - Java: update the Maven POM version under
asherah-java/java/. - Go: update any version constants or module tags in
asherah-go/.
- Node: update
Record the changes in CHANGELOG.md under a new heading (e.g. ## [1.0.0] - YYYY-MM-DD).
Run targeted tests before broader validation:
cargo fmt --allandcargo clippy --all-targets --all-features.cargo testat the workspace root and again withinasherah/.- Feature adapters (set the relevant environment values):
- SQLite:
cargo test --features sqlite. - MySQL:
MYSQL_URL=mysql://user:pass@host/db cargo test --features mysql. - Postgres:
POSTGRES_URL=postgres://user:pass@host/db cargo test --features postgres. - DynamoDB:
AWS_REGION=us-west-2 DDB_TABLE=asherah-tests cargo test --features dynamodb.
- SQLite:
- Language bindings:
- Node:
npm install && npm testinasherah-node/for each supported platform (CI covers macOS, Linux, Windows). - Python:
maturin develop && python -m pytest asherah-py/testsacross the supported interpreter matrix. - Ruby:
bundle exec rake testinasherah-ruby/. - Go:
ASHERAH_GO_NATIVE=<path/to/libasherah_ffi.so> go test ./...inasherah-go/. - .NET:
dotnet test asherah-dotnet/AsherahDotNet.slnx. - Java:
mvn testinsideasherah-java/java/.
- Node:
If any platform-specific artifacts are generated (e.g., prebuilt Node binaries), confirm they pass smoke tests before publishing.
Finally, execute the full matrix script for parity with CI:
./scripts/test-in-docker.sh- Create release builds of the Rust crates using
cargo build --release. - For Node, Python, Ruby, Go, .NET, and Java bindings, follow the packaging
instructions in their respective directories. Typical commands:
- Node:
npm run build && npm pack. - Python:
maturin build --release. - Ruby:
gem build asherah-ruby.gemspec. - Go: ensure the FFI artifacts are available, then tag the module.
- .NET:
dotnet pack -c Release. - Java:
mvn -pl java -am package.
- Node:
- Upload artifacts to their registries (crates.io, npm, PyPI, RubyGems, NuGet, Maven Central) once validation succeeds. Each workflow requires credentials configured via GitHub Actions secrets.
- Tag the repository using
git tag vX.Y.Z. - Push the tag to GitHub (
git push origin vX.Y.Z). - Create a GitHub release and populate the notes from the corresponding
CHANGELOG.mdentry.
- Monitor crates.io and other registries to confirm artifacts are available.
- Validate that documentation (e.g., https://docs.rs/asherah) has built successfully.
- Update any downstream sample applications or integration tests to the new version.