Publishing a Release
This guide is for the Release Manager after the combined Paimon and PyPaimon vote has passed and its result has been recorded. To prepare a candidate, start with Creating a Release.
Confirm the approved inputs
Use the exact candidate named in the successful vote. Keep the vote result, source URLs, closed Nexus repository ID, commit SHA, and workflow run URL available throughout publication.
Set the same variables used when preparing that candidate. These values are examples; replace them with the approved release values:
PAIMON_VERSION="2.0.0"
DOC_VERSION="2.0"
RC_NUMBER="1"
RELEASE_BRANCH="release-2.0"
RC_REF="release-${PAIMON_VERSION}-rc${RC_NUMBER}"
RELEASE_TAG="release-${PAIMON_VERSION}"
Run the tag commands in the release clone with the RM's signing key configured and the approved RC tag available locally. Use the same ASF distribution and Nexus access configured during RM setup.
| Publish | Preserve |
|---|---|
| Final Git tag | The exact approved RC commit |
| ASF source releases | The approved archives, signatures, and checksums |
| Maven Central artifacts | The exact closed Nexus repository approved by the vote |
| PyPI package | The approved source commit, using the final Python version |
| Documentation and website | Version labels, links, and examples matching the release |
Create the final signed tag
The final tag must point to exactly the approved RC commit:
git tag -s "${RELEASE_TAG}" "refs/tags/${RC_REF}^{commit}" \
-m "Release Apache Paimon ${PAIMON_VERSION}"
test "$(git rev-parse "refs/tags/${RC_REF}^{commit}")" = \
"$(git rev-parse "refs/tags/${RELEASE_TAG}^{commit}")"
git tag -v "${RELEASE_TAG}"
git push origin "refs/tags/${RELEASE_TAG}:refs/tags/${RELEASE_TAG}"
Promote the source releases
Move, rather than copy or rebuild, both approved candidate directories:
svn mv -m "Release Apache Paimon ${PAIMON_VERSION}" \
"https://dist.apache.org/repos/dist/dev/paimon/paimon-${PAIMON_VERSION}-rc${RC_NUMBER}" \
"https://dist.apache.org/repos/dist/release/paimon/paimon-${PAIMON_VERSION}"
svn mv -m "Release PyPaimon ${PAIMON_VERSION}" \
"https://dist.apache.org/repos/dist/dev/paimon/pypaimon-${PAIMON_VERSION}-rc${RC_NUMBER}" \
"https://dist.apache.org/repos/dist/release/paimon/pypaimon-${PAIMON_VERSION}"
Promote convenience artifacts
- In Nexus, confirm that the recorded Java staging repository is still closed and has the exact artifact tree approved by the vote.
- Release that exact closed repository to Maven Central. Do not upload or rebuild the Java artifacts again.
- Confirm that the final tag's PyPI publish job builds
pypaimon==PAIMON_VERSIONfrom the approved tag commit and does not change project source. - Verify Maven Central and PyPI before announcing the release.
Publish and announce
Create a GitHub release from release-PAIMON_VERSION, review the generated
notes, and link both source releases.
Before announcing the release, publish the versioned documentation and update
the project website. Treat the documentation in apache/paimon and the project
website in apache/paimon-website as two separate, required updates.
- In
apache/paimon, publish documentation forDOC_VERSIONfrom the release branch so that the published content matches the released code:- On
RELEASE_BRANCH, updatedocs/docusaurus.config.jswith the releasedbaseUrl,version,versionTitle,branch,editUrl,isStable,stableDocs,previousDocs, and navbar version menu. - On
master, set the next development version and updatestableDocs,previousDocs, and the navbar version menu to includeDOC_VERSIONas the stable release. - Review
docs/docs/project/download.mdxand any release-specific engine or compatibility information. The2.2-SNAPSHOT,<Stable>, and<Unstable>sections must render the released artifacts on the stable site. - Run
yarn buildfrom thedocsdirectory for both configurations.
- On
- In
apache/paimon-website, update every public release entry point:- Add the Paimon and PyPaimon source archives, checksums, signatures, and
current dependency examples to
community/docs/downloads.md. - Create or update the appropriate
community/docs/releases/release-${DOC_VERSION}.mdrelease note. Itsversionfront matter must equalPAIMON_VERSION, and its weight must place it correctly in the release list. - Add
DOC_VERSIONto theversionslist insrc/app/components/header/header.component.ts. If the menu keeps a fixed number of versions, remove the oldest entry. - Run
pnpm buildto parse the release metadata and build the website.
- Add the Paimon and PyPaimon source archives, checksums, signatures, and
current dependency examples to
- After deployment, verify all public entry points before sending the
announcement:
https://paimon.apache.org/docs/${DOC_VERSION}/serves the released docs and the version switcher identifies it as stable;- the homepage
DOCUMENTmenu includesDOC_VERSIONon desktop and mobile; https://paimon.apache.org/downloads/lists both signed source releases;https://paimon.apache.org/releases/${PAIMON_VERSION}shows the release note.
After ASF mirrors, Maven Central, PyPI, the versioned documentation, and the
project website are all available, announce the release to
dev@paimon.apache.org and announce@apache.org from an @apache.org address.
Remove superseded releases from the live ASF distribution area when required; they remain available from the Apache archive.
Completion checklist
- The final signed tag resolves to the approved RC commit.
- Both source releases and their signatures and checksums are available.
- Maven Central and PyPI expose the intended release versions.
- Versioned documentation, download links, and release notes are published.
- The announcement links the public release, and superseded candidates have been handled without replacing the artifacts reviewed in the vote.