We aim to release a new version of SlateDB every 2 months. This is a guideline, not a strict rule. The actual cadence may vary based on the amount of work that has been completed.
Anyone may propose a new SlateDB release by opening a Github issue.
GOVERNANCE.md defines how a release is approved.
SlateDB releases are published using a Github release action defined in .github/workflows/release.yml. To create a new release:
- Go to the release action page
- Input a version value in the format
X.Y.Zand clickRun workflow.
The release action will do the following:
- Verify that the version adheres to the semantic versioning format.
- Check out the latest code from the
mainbranch. - Update the version in Cargo.toml to the specified version.
- Commit the changes and push to the
mainbranch. - Create a Github release with the specified version and auto-generated release notes.
- Publish a release to crates.io.
To create a patch release for an existing version:
- If it doesn't already exist, create a ..x branch from the release tag. So for example, for the v0.6.0 release, run
git checkout -b v0.6.x v0.6.0. - Cherry-pick the desired changes onto the release branch and push it.
- Run the release workflow against the release branch and specify the desired release version (e.g. v0.6.1)
SlateDB Python bindings are published using a Github release action defined in .github/workflows/python.yml. To create a new release:
- Go to the python release action page
- Input a version value in the format
X.Y.Zand clickRun workflow.
Python releases can only run after a crate release has been published to crates.io using the Rust publication process shown above. This is because the Python release action can only run against a release tag in the git repo (not on main).
SlateDB Java bindings are published using the Github release action defined in .github/workflows/java.yaml.
Before publishing Java artifacts, configure these repository secrets:
MAVEN_CENTRAL_USERNAME: Sonatype Central Portal token username.MAVEN_CENTRAL_PASSWORD: Sonatype Central Portal token password.MAVEN_CENTRAL_SIGNING_KEY: ASCII-armored private GPG key used to sign artifacts.MAVEN_CENTRAL_SIGNING_KEY_PASSWORD: Passphrase for the signing key.
To create a Java release:
- Ensure the Rust release exists and the
vX.Y.Ztag has been created. - Go to the java release action page.
- Input the same version value used for the tag (format
X.Y.Z) and clickRun workflow.
The Java release action will do the following:
- Verify the version string follows semantic versioning.
- Build native
slatedb_uniffilibraries for all supported targets:linux-x86-64linux-aarch64darwin-x86-64darwin-aarch64win32-x86-64win32-aarch64
- Generate UniFFI Java sources during the Gradle publish from the host Linux native library.
- Assemble one universal
io.slatedb:slatedb-uniffijar containing all native libraries as JNA-loadable resources. - Publish signed Maven artifacts (
jar,sources,javadoc,pom) to Maven Central frombindings/java.
SlateDB Node bindings are published using .github/workflows/node.yaml.
Before the first publish, configure npm trusted publishing for the package:
@slatedb/uniffi
To create a Node release:
- Ensure the Rust release exists and the
vX.Y.Ztag has been created. - Go to the node release action page.
- Input the same version value used for the tag (format
X.Y.Z) and clickRun workflow.
The Node release action will do the following:
- Verify the version string follows semantic versioning.
- Build native
slatedb_uniffilibraries for:linux-x64-gnulinux-arm64-gnudarwin-x64darwin-arm64win32-x64win32-arm64
- Generate UniFFI Node bindings from the tagged source tree.
- Assemble one
@slatedb/uniffinpm artifact containing all generated JavaScript files and all bundled native libraries underprebuilds/<target>/. - Publish the package to npm using trusted publishing.