RELEASE.md
Rama main · réplica de lectura del repositorio original.
# 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](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](https://github.com/slatedb/slatedb/actions/workflows/release.yaml)
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 <major>.<minor>.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](https://github.com/slatedb/slatedb/actions/workflows/python.yaml)
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](https://github.com/slatedb/slatedb/actions/workflows/java.yaml).
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:
```text
@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](https://github.com/slatedb/slatedb/actions/workflows/node.yaml).
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.