Pre-RC Checklist
Run through this before cutting a release candidate. It catches the problems that are expensive to discover mid-vote, now that a single tag releases Java, Rust, Python, and C++ together.
Access and secrets
- Maven Central (Apache Nexus) access for
org.apache.fluss— see Release Manager Preparation - Trusted Publishing configured on crates.io, PyPI, and TestPyPI, each still naming
apache/flussand the right workflow file — see Release Manager Preparation - crates.io owner of
fluss-rs; PyPI maintainer ofpyfluss - The ASF Infra request for
apache/fluss-gatewayis resolved, the Docker Hub repository exists, and the release manager has access toapache/fluss,apache/fluss-gateway, andapache/fluss-quickstart-flink - GPG key published to the Apache KEYS file
Build and publish dry-runs
-
the RC tag's
rust-release.ymlrun authenticated against crates.io — that step is the only check that the Trusted Publishing config is correct before the release tag -
cargo publish -p fluss-rs --dry-runsucceeds -
Python wheels + sdist install from TestPyPI (the RC tag publishes there):
pip install -i https://test.pypi.org/simple/ pyfluss==${RELEASE_VERSION} -
fluss-cppBazel build smoke test passes:cd fluss-rust/bindings/cpp && bazel build //... -
On native
amd64andarm64buildx nodes, the Gateway distribution and container smoke tests pass:GATEWAY_ARCH=<amd64-or-arm64> \RUN_SMOKE=true \docker/fluss-gateway/build.sh
Audits
-
cargo deny check licensespasses; the Rust dependency list is regenerated and committed -
fluss-gateway/scripts/generate_binary_license.py --checkpasses and the Gateway binaryLICENSE/NOTICEmatch its runtime dependency closure - Java + Rust + binding + Gateway CI is green on the release branch
-
LICENSE/NOTICEcover any third-party content bundled in the source release (including underfluss-rust/)
Once these pass, proceed to Creating a Fluss Release.