Skip to content

Latest commit

 

History

History
109 lines (74 loc) · 4.49 KB

File metadata and controls

109 lines (74 loc) · 4.49 KB

Releasing SlateDB

Cadence

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.

Proposal

Anyone may propose a new SlateDB release by opening a Github issue.

Approval

GOVERNANCE.md defines how a release is approved.

Publication

SlateDB releases are published using a Github release action defined in .github/workflows/release.yml. To create a new release:

  1. Go to the release action page
  2. Input a version value in the format X.Y.Z and click Run workflow.

The release action will do the following:

  1. Verify that the version adheres to the semantic versioning format.
  2. Check out the latest code from the main branch.
  3. Update the version in Cargo.toml to the specified version.
  4. Commit the changes and push to the main branch.
  5. Create a Github release with the specified version and auto-generated release notes.
  6. Publish a release to crates.io.

Patch releases

To create a patch release for an existing version:

  1. 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.
  2. Cherry-pick the desired changes onto the release branch and push it.
  3. Run the release workflow against the release branch and specify the desired release version (e.g. v0.6.1)

Bindings

Python Bindings

SlateDB Python bindings are published using a Github release action defined in .github/workflows/python.yml. To create a new release:

  1. Go to the python release action page
  2. Input a version value in the format X.Y.Z and click Run 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).

Java Bindings (Maven Central)

SlateDB Java bindings are published using the Github release action defined in .github/workflows/java.yaml.

Before publishing Java artifacts, configure these repository secrets:

  1. MAVEN_CENTRAL_USERNAME: Sonatype Central Portal token username.
  2. MAVEN_CENTRAL_PASSWORD: Sonatype Central Portal token password.
  3. MAVEN_CENTRAL_SIGNING_KEY: ASCII-armored private GPG key used to sign artifacts.
  4. MAVEN_CENTRAL_SIGNING_KEY_PASSWORD: Passphrase for the signing key.

To create a Java release:

  1. Ensure the Rust release exists and the vX.Y.Z tag has been created.
  2. Go to the java release action page.
  3. Input the same version value used for the tag (format X.Y.Z) and click Run workflow.

The Java release action will do the following:

  1. Verify the version string follows semantic versioning.
  2. Build native slatedb_uniffi libraries for all supported targets:
    • linux-x86-64
    • linux-aarch64
    • darwin-x86-64
    • darwin-aarch64
    • win32-x86-64
    • win32-aarch64
  3. Generate UniFFI Java sources during the Gradle publish from the host Linux native library.
  4. Assemble one universal io.slatedb:slatedb-uniffi jar containing all native libraries as JNA-loadable resources.
  5. Publish signed Maven artifacts (jar, sources, javadoc, pom) to Maven Central from bindings/java.

Node Bindings (npm)

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:

  1. Ensure the Rust release exists and the vX.Y.Z tag has been created.
  2. Go to the node release action page.
  3. Input the same version value used for the tag (format X.Y.Z) and click Run workflow.

The Node release action will do the following:

  1. Verify the version string follows semantic versioning.
  2. Build native slatedb_uniffi libraries for:
    • linux-x64-gnu
    • linux-arm64-gnu
    • darwin-x64
    • darwin-arm64
    • win32-x64
    • win32-arm64
  3. Generate UniFFI Node bindings from the tagged source tree.
  4. Assemble one @slatedb/uniffi npm artifact containing all generated JavaScript files and all bundled native libraries under prebuilds/<target>/.
  5. Publish the package to npm using trusted publishing.