From 6da700a80dad28a265f557ba99cfcd575890366c Mon Sep 17 00:00:00 2001 From: Keith Lee Date: Sun, 15 Feb 2026 10:23:41 +0000 Subject: [PATCH 1/3] Add missed API documentation update (forgot to push to branch before PR merging!) --- website/docs/user-guide/cpp/api-reference.md | 3 ++- website/docs/user-guide/rust/api-reference.md | 11 ++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/website/docs/user-guide/cpp/api-reference.md b/website/docs/user-guide/cpp/api-reference.md index 00ff8086..4ff1c5bf 100644 --- a/website/docs/user-guide/cpp/api-reference.md +++ b/website/docs/user-guide/cpp/api-reference.md @@ -202,8 +202,9 @@ Complete API reference for the Fluss C++ client. When using `table.NewRow()`, the `Set()` method auto-routes to the correct type based on the schema: -| Method | Description | +| Method | Description | |----------------------------------------------------------|-----------------------------------| +| `Set(const std::string& name, std::nullptr_t)` | Set field to null by column name | | `Set(const std::string& name, bool value)` | Set boolean by column name | | `Set(const std::string& name, int32_t value)` | Set integer by column name | | `Set(const std::string& name, int64_t value)` | Set big integer by column name | diff --git a/website/docs/user-guide/rust/api-reference.md b/website/docs/user-guide/rust/api-reference.md index d5d06715..0929ce68 100644 --- a/website/docs/user-guide/rust/api-reference.md +++ b/website/docs/user-guide/rust/api-reference.md @@ -50,11 +50,12 @@ Complete API reference for the Fluss Rust client. ### Partition Operations -| Method | Description | -|--------------------------------------------------------------------------------------------------------------------------|---------------------| -| `async fn list_partition_infos(&self, table_path: &TablePath) -> Result>` | List all partitions | -| `async fn create_partition(&self, table_path: &TablePath, spec: &PartitionSpec, ignore_if_exists: bool) -> Result<()>` | Create a partition | -| `async fn drop_partition(&self, table_path: &TablePath, spec: &PartitionSpec, ignore_if_not_exists: bool) -> Result<()>` | Drop a partition | +| Method | Description | +|--------------------------------------------------------------------------------------------------------------------------------------|---------------------------------| +| `async fn list_partition_infos(&self, table_path: &TablePath) -> Result>` | List all partitions | +| `async fn list_partition_infos_with_spec(&self, table_path: &TablePath, spec: Option<&PartitionSpec>) -> Result>` | List partitions matching a spec | +| `async fn create_partition(&self, table_path: &TablePath, spec: &PartitionSpec, ignore_if_exists: bool) -> Result<()>` | Create a partition | +| `async fn drop_partition(&self, table_path: &TablePath, spec: &PartitionSpec, ignore_if_not_exists: bool) -> Result<()>` | Drop a partition | ### Offset Operations From 8555dcc4b08d71a46ee4d4a854044a45b51fcd7c Mon Sep 17 00:00:00 2001 From: Keith Lee Date: Sun, 15 Feb 2026 12:54:13 +0000 Subject: [PATCH 2/3] Add missed release.md (forgotten to push in earlier PR) --- website/docs/release.md | 184 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 website/docs/release.md diff --git a/website/docs/release.md b/website/docs/release.md new file mode 100644 index 00000000..fd622c15 --- /dev/null +++ b/website/docs/release.md @@ -0,0 +1,184 @@ +--- +sidebar_position: 4 +--- +# Release + +This document describes how to create a release of the Fluss clients (fluss-rust, fluss-python, fluss-cpp) from the [fluss-rust](https://github.com/apache/fluss-rust) repository. It follows the [Apache Fluss release guide](https://fluss.apache.org/community/how-to-release/creating-a-fluss-release/) and the [Apache OpenDAL release guide](https://nightlies.apache.org/opendal/opendal-docs-stable/community/release/). + +Publishing software has legal consequences. This guide complements the [Product Release Policy](https://www.apache.org/legal/release-policy.html) and [Release Distribution Policy](https://infra.apache.org/release-distribution.html). + +## Overview + +1. [Decide to release](#decide-to-release) +2. [Prepare for the release](#prepare-for-the-release) +3. [Build a release candidate](#build-a-release-candidate) +4. [Vote on the release candidate](#vote-on-the-release-candidate) +5. [Fix any issues](#fix-any-issues) (if needed, go back to step 3) +6. [Finalize the release](#finalize-the-release) +7. [Promote the release](#promote-the-release) + +## Decide to Release + +Deciding to release and selecting a Release Manager is a consensus-based decision of the community. Anybody can propose a release on the dev mailing list. + +## Prepare for the Release + +### One-Time Setup + +See [Release Manager Preparation](https://fluss.apache.org/community/how-to-release/release-manager-preparation/) for GPG key setup. For fluss-rust you do **not** need Nexus/Maven. + +### Install Rust + +The release script uses `git archive` and `gpg`. Building or verifying the project requires Rust (match [rust-toolchain.toml](https://github.com/apache/fluss-rust/blob/main/rust-toolchain.toml)). The dependency list script requires Python 3.11+. + +```bash +rustc --version +cargo --version +``` + +To use `just release`, install [just](https://github.com/casey/just). Otherwise run `./scripts/release.sh $RELEASE_VERSION`. + +### Set Environment Variables + +```bash +export RELEASE_VERSION="0.1.0" +export RELEASE_TAG="v${RELEASE_VERSION}" +export SVN_RELEASE_DIR="fluss-rust-${RELEASE_VERSION}" +export LAST_VERSION="0.0.9" # omit for the first release +export NEXT_VERSION="0.2.0" +``` + +### Generate Dependencies List + +Required by [ASF release policy](https://www.apache.org/legal/release-policy.html). Do this on `main` before creating the release branch. + +```bash +git checkout main && git pull +python3 scripts/dependencies.py generate +git add **/DEPENDENCIES*.tsv +git commit -m "chore: update dependency list for release ${RELEASE_VERSION}" +git push origin main +``` + +### Create a Release Branch + +```bash +git checkout main && git pull +git checkout -b release-${RELEASE_VERSION} +git push origin release-${RELEASE_VERSION} +``` + +### Bump Version on Main + +```bash +git checkout main && git pull +./scripts/bump-version.sh $RELEASE_VERSION $NEXT_VERSION +git add Cargo.toml +git commit -m "Bump version to ${NEXT_VERSION}" +git push origin main +``` + +## Build a Release Candidate + +### Set RC Variables + +```bash +export RC_NUM="1" +export RC_TAG="v${RELEASE_VERSION}-rc${RC_NUM}" +export SVN_RC_DIR="fluss-rust-${RELEASE_VERSION}-rc${RC_NUM}" +``` + +### Tag and Push + +```bash +git checkout release-${RELEASE_VERSION} && git pull +git tag -s $RC_TAG -m "${RC_TAG}" +git push origin $RC_TAG +``` + +Pushing the tag triggers CI (GitHub Actions: Release Rust, Release Python). + +### Create Source Artifacts + +```bash +just release $RELEASE_VERSION +# Or: ./scripts/release.sh $RELEASE_VERSION +``` + +This creates under `dist/`: +- `fluss-rust-${RELEASE_VERSION}-incubating.tgz` +- `fluss-rust-${RELEASE_VERSION}-incubating.tgz.sha512` +- `fluss-rust-${RELEASE_VERSION}-incubating.tgz.asc` + +Verify: `gpg --verify dist/fluss-rust-${RELEASE_VERSION}-incubating.tgz.asc dist/fluss-rust-${RELEASE_VERSION}-incubating.tgz` + +### Stage to SVN + +```bash +svn checkout https://dist.apache.org/repos/dist/dev/incubator/fluss fluss-dist-dev --depth=immediates +cd fluss-dist-dev +mkdir $SVN_RC_DIR +cp ../dist/fluss-rust-${RELEASE_VERSION}-incubating.* $SVN_RC_DIR/ +svn add $SVN_RC_DIR +svn commit -m "Add fluss-rust ${RELEASE_VERSION} RC${RC_NUM}" +``` + +## Vote on the Release Candidate + +Start a vote on the dev@ mailing list with subject: `[VOTE] Release Apache Fluss clients ${RELEASE_VERSION} (RC${RC_NUM})` + +The vote is open for at least 72 hours. It requires at least 3 PPMC affirmative votes. If the project is in incubation, a second vote on general@incubator.apache.org is required. + +## Fix Any Issues + +If the vote fails: + +1. Fix issues on `main` or the release branch via PRs. +2. Optionally remove the old RC from dist.apache.org dev. +3. Increment `RC_NUM`, recreate tag and artifacts, and repeat. + +## Finalize the Release + +### Push the Release Tag + +```bash +git checkout $RC_TAG +git tag -s $RELEASE_TAG -m "Release fluss-rust, fluss-python, fluss-cpp ${RELEASE_VERSION}" +git push origin $RELEASE_TAG +``` + +### Deploy Source Artifacts + +```bash +svn mv -m "Release fluss-rust ${RELEASE_VERSION}" \ + https://dist.apache.org/repos/dist/dev/incubator/fluss/$SVN_RC_DIR \ + https://dist.apache.org/repos/dist/release/incubator/fluss/$SVN_RELEASE_DIR +``` + +### Verify Published Packages + +- **Rust:** [crates.io/crates/fluss-rs](https://crates.io/crates/fluss-rs) +- **Python:** [PyPI pyfluss](https://pypi.org/project/pyfluss/) +- **C++:** Distributed via the source archive + +### Create GitHub Release + +1. Go to [Releases > New release](https://github.com/apache/fluss-rust/releases/new). +2. Choose tag `$RELEASE_TAG`, target `release-${RELEASE_VERSION}`. +3. Generate release notes, add notable/breaking changes and download links. +4. Publish. + +### Update CHANGELOG.md + +Add an entry for `$RELEASE_VERSION` on `main`. + +## Promote the Release + +- Merge website PRs (release blog, download page). +- Wait 24 hours, then announce on dev@ and announce@apache.org. + +## See Also + +- [Release Manager Preparation](https://fluss.apache.org/community/how-to-release/release-manager-preparation/) +- [How to Verify a Release Candidate](https://github.com/apache/fluss-rust/blob/main/docs/verifying-a-release-candidate.md) +- [ASF Release Policy](https://www.apache.org/legal/release-policy.html) From c3d4b1e7a5328de4e3a42062821e5eba997f538f Mon Sep 17 00:00:00 2001 From: Keith Lee Date: Mon, 16 Feb 2026 12:40:08 +0000 Subject: [PATCH 3/3] Migrate release docs into website --- docs/rust-client.md | 0 website/docs/release.md | 184 ------------------ .../docs/release/create-release.md | 10 +- .../docs/release}/generate-release-note.md | 0 .../release}/verifying-a-release-candidate.md | 0 website/sidebars.ts | 8 +- .../static/img}/release-guide.png | Bin 7 files changed, 14 insertions(+), 188 deletions(-) delete mode 100644 docs/rust-client.md delete mode 100644 website/docs/release.md rename docs/creating-a-release.md => website/docs/release/create-release.md (97%) rename {docs => website/docs/release}/generate-release-note.md (100%) rename {docs => website/docs/release}/verifying-a-release-candidate.md (100%) rename {docs/assets => website/static/img}/release-guide.png (100%) diff --git a/docs/rust-client.md b/docs/rust-client.md deleted file mode 100644 index e69de29b..00000000 diff --git a/website/docs/release.md b/website/docs/release.md deleted file mode 100644 index fd622c15..00000000 --- a/website/docs/release.md +++ /dev/null @@ -1,184 +0,0 @@ ---- -sidebar_position: 4 ---- -# Release - -This document describes how to create a release of the Fluss clients (fluss-rust, fluss-python, fluss-cpp) from the [fluss-rust](https://github.com/apache/fluss-rust) repository. It follows the [Apache Fluss release guide](https://fluss.apache.org/community/how-to-release/creating-a-fluss-release/) and the [Apache OpenDAL release guide](https://nightlies.apache.org/opendal/opendal-docs-stable/community/release/). - -Publishing software has legal consequences. This guide complements the [Product Release Policy](https://www.apache.org/legal/release-policy.html) and [Release Distribution Policy](https://infra.apache.org/release-distribution.html). - -## Overview - -1. [Decide to release](#decide-to-release) -2. [Prepare for the release](#prepare-for-the-release) -3. [Build a release candidate](#build-a-release-candidate) -4. [Vote on the release candidate](#vote-on-the-release-candidate) -5. [Fix any issues](#fix-any-issues) (if needed, go back to step 3) -6. [Finalize the release](#finalize-the-release) -7. [Promote the release](#promote-the-release) - -## Decide to Release - -Deciding to release and selecting a Release Manager is a consensus-based decision of the community. Anybody can propose a release on the dev mailing list. - -## Prepare for the Release - -### One-Time Setup - -See [Release Manager Preparation](https://fluss.apache.org/community/how-to-release/release-manager-preparation/) for GPG key setup. For fluss-rust you do **not** need Nexus/Maven. - -### Install Rust - -The release script uses `git archive` and `gpg`. Building or verifying the project requires Rust (match [rust-toolchain.toml](https://github.com/apache/fluss-rust/blob/main/rust-toolchain.toml)). The dependency list script requires Python 3.11+. - -```bash -rustc --version -cargo --version -``` - -To use `just release`, install [just](https://github.com/casey/just). Otherwise run `./scripts/release.sh $RELEASE_VERSION`. - -### Set Environment Variables - -```bash -export RELEASE_VERSION="0.1.0" -export RELEASE_TAG="v${RELEASE_VERSION}" -export SVN_RELEASE_DIR="fluss-rust-${RELEASE_VERSION}" -export LAST_VERSION="0.0.9" # omit for the first release -export NEXT_VERSION="0.2.0" -``` - -### Generate Dependencies List - -Required by [ASF release policy](https://www.apache.org/legal/release-policy.html). Do this on `main` before creating the release branch. - -```bash -git checkout main && git pull -python3 scripts/dependencies.py generate -git add **/DEPENDENCIES*.tsv -git commit -m "chore: update dependency list for release ${RELEASE_VERSION}" -git push origin main -``` - -### Create a Release Branch - -```bash -git checkout main && git pull -git checkout -b release-${RELEASE_VERSION} -git push origin release-${RELEASE_VERSION} -``` - -### Bump Version on Main - -```bash -git checkout main && git pull -./scripts/bump-version.sh $RELEASE_VERSION $NEXT_VERSION -git add Cargo.toml -git commit -m "Bump version to ${NEXT_VERSION}" -git push origin main -``` - -## Build a Release Candidate - -### Set RC Variables - -```bash -export RC_NUM="1" -export RC_TAG="v${RELEASE_VERSION}-rc${RC_NUM}" -export SVN_RC_DIR="fluss-rust-${RELEASE_VERSION}-rc${RC_NUM}" -``` - -### Tag and Push - -```bash -git checkout release-${RELEASE_VERSION} && git pull -git tag -s $RC_TAG -m "${RC_TAG}" -git push origin $RC_TAG -``` - -Pushing the tag triggers CI (GitHub Actions: Release Rust, Release Python). - -### Create Source Artifacts - -```bash -just release $RELEASE_VERSION -# Or: ./scripts/release.sh $RELEASE_VERSION -``` - -This creates under `dist/`: -- `fluss-rust-${RELEASE_VERSION}-incubating.tgz` -- `fluss-rust-${RELEASE_VERSION}-incubating.tgz.sha512` -- `fluss-rust-${RELEASE_VERSION}-incubating.tgz.asc` - -Verify: `gpg --verify dist/fluss-rust-${RELEASE_VERSION}-incubating.tgz.asc dist/fluss-rust-${RELEASE_VERSION}-incubating.tgz` - -### Stage to SVN - -```bash -svn checkout https://dist.apache.org/repos/dist/dev/incubator/fluss fluss-dist-dev --depth=immediates -cd fluss-dist-dev -mkdir $SVN_RC_DIR -cp ../dist/fluss-rust-${RELEASE_VERSION}-incubating.* $SVN_RC_DIR/ -svn add $SVN_RC_DIR -svn commit -m "Add fluss-rust ${RELEASE_VERSION} RC${RC_NUM}" -``` - -## Vote on the Release Candidate - -Start a vote on the dev@ mailing list with subject: `[VOTE] Release Apache Fluss clients ${RELEASE_VERSION} (RC${RC_NUM})` - -The vote is open for at least 72 hours. It requires at least 3 PPMC affirmative votes. If the project is in incubation, a second vote on general@incubator.apache.org is required. - -## Fix Any Issues - -If the vote fails: - -1. Fix issues on `main` or the release branch via PRs. -2. Optionally remove the old RC from dist.apache.org dev. -3. Increment `RC_NUM`, recreate tag and artifacts, and repeat. - -## Finalize the Release - -### Push the Release Tag - -```bash -git checkout $RC_TAG -git tag -s $RELEASE_TAG -m "Release fluss-rust, fluss-python, fluss-cpp ${RELEASE_VERSION}" -git push origin $RELEASE_TAG -``` - -### Deploy Source Artifacts - -```bash -svn mv -m "Release fluss-rust ${RELEASE_VERSION}" \ - https://dist.apache.org/repos/dist/dev/incubator/fluss/$SVN_RC_DIR \ - https://dist.apache.org/repos/dist/release/incubator/fluss/$SVN_RELEASE_DIR -``` - -### Verify Published Packages - -- **Rust:** [crates.io/crates/fluss-rs](https://crates.io/crates/fluss-rs) -- **Python:** [PyPI pyfluss](https://pypi.org/project/pyfluss/) -- **C++:** Distributed via the source archive - -### Create GitHub Release - -1. Go to [Releases > New release](https://github.com/apache/fluss-rust/releases/new). -2. Choose tag `$RELEASE_TAG`, target `release-${RELEASE_VERSION}`. -3. Generate release notes, add notable/breaking changes and download links. -4. Publish. - -### Update CHANGELOG.md - -Add an entry for `$RELEASE_VERSION` on `main`. - -## Promote the Release - -- Merge website PRs (release blog, download page). -- Wait 24 hours, then announce on dev@ and announce@apache.org. - -## See Also - -- [Release Manager Preparation](https://fluss.apache.org/community/how-to-release/release-manager-preparation/) -- [How to Verify a Release Candidate](https://github.com/apache/fluss-rust/blob/main/docs/verifying-a-release-candidate.md) -- [ASF Release Policy](https://www.apache.org/legal/release-policy.html) diff --git a/docs/creating-a-release.md b/website/docs/release/create-release.md similarity index 97% rename from docs/creating-a-release.md rename to website/docs/release/create-release.md index 8b4c868f..fc936f9a 100644 --- a/docs/creating-a-release.md +++ b/website/docs/release/create-release.md @@ -1,3 +1,7 @@ +--- +sidebar_position: 4 +--- + # Creating a Fluss Rust Client Release This document describes in detail how to create a release of the **Fluss clients** (fluss-rust, fluss-python, fluss-cpp) from the [fluss-rust](https://github.com/apache/fluss-rust) repository. It is based on the [Creating a Fluss Release](https://fluss.apache.org/community/how-to-release/creating-a-fluss-release/) guide of the Apache Fluss project and the [release guide of Apache OpenDAL](https://nightlies.apache.org/opendal/opendal-docs-stable/community/release/); releases are source archives plus CI-published crates.io and PyPI. @@ -6,7 +10,7 @@ Publishing software has legal consequences. This guide complements the foundatio ## Overview -![Release process overview](assets/release-guide.png) +![Release process overview](/img/release-guide.png) The release process consists of: @@ -22,7 +26,7 @@ The release process consists of: Deciding to release and selecting a Release Manager is the first step. This is a consensus-based decision of the community. -Anybody can propose a release (e.g. on the dev mailing list), giving a short rationale and nominating a committer as Release Manager (including themselves). Any objections should be resolved by consensus before starting. +Anybody can propose a release (e.g. on the dev [mailing list](https://fluss.apache.org/community/welcome/)), giving a short rationale and nominating a committer as Release Manager (including themselves). Any objections should be resolved by consensus before starting. **Checklist to proceed** @@ -360,7 +364,7 @@ svn commit -m "Remove RC after release fluss-rust ${RELEASE_VERSION}" 2. Choose tag `$RELEASE_TAG`. 3. Set the target to the release branch `release-${RELEASE_VERSION}` (i.e., the branch/commit used to create `$RELEASE_TAG`). 4. Click **Generate release notes**, then add: notable changes, breaking changes (if any) from component upgrade docs, **official download link** (source archive and verification), and install instructions for fluss-rust, fluss-python, fluss-cpp. - - **Download link:** `https://downloads.apache.org/incubator/fluss/fluss-rust-${RELEASE_VERSION}/` (or the project download page). In the release description, include checksums and GPG verification steps. + - **Download link:** `https://downloads.apache.org/incubator/fluss/fluss-rust-${RELEASE_VERSION}/` (or the project download page). In the release description, include checksums and GPG verification steps. 5. Click **Publish release**. ### 6. Update CHANGELOG.md on main diff --git a/docs/generate-release-note.md b/website/docs/release/generate-release-note.md similarity index 100% rename from docs/generate-release-note.md rename to website/docs/release/generate-release-note.md diff --git a/docs/verifying-a-release-candidate.md b/website/docs/release/verifying-a-release-candidate.md similarity index 100% rename from docs/verifying-a-release-candidate.md rename to website/docs/release/verifying-a-release-candidate.md diff --git a/website/sidebars.ts b/website/sidebars.ts index 51bdd5cf..f6fbeaca 100644 --- a/website/sidebars.ts +++ b/website/sidebars.ts @@ -17,7 +17,13 @@ const sidebars: SidebarsConfig = { 'developer-guide/contributing', ], }, - 'release', + { + type: 'category', + label: 'Release', + items: [ + {type: 'autogenerated', dirName: 'release'}, + ], + }, ], }; diff --git a/docs/assets/release-guide.png b/website/static/img/release-guide.png similarity index 100% rename from docs/assets/release-guide.png rename to website/static/img/release-guide.png