-
Notifications
You must be signed in to change notification settings - Fork 202
Release Staging Guide
This document describes how to use the cloudberry-release.sh script to prepare an Apache Cloudberry (Incubating) release candidate.
It is intended for Release Managers and PPMC members responsible for creating source artifacts.
The cloudberry-release.sh script automates the following tasks:
- Validates version consistency across:
- configure.ac
- configure
- gpMgmt/bin/gppylib/gpversion.py
- pom.xml
- Validates Git repository state and upstream remote
- Checks required tools (
sha512sum,tar/gtar,gpg,xmllint) - Creates and validates Git release tags
- Ensures Git submodules are initialized
- Builds source tarballs including submodules
- Generates:
- SHA-512 checksum (
.sha512) - GPG signature (
.asc)
- SHA-512 checksum (
- Verifies artifact integrity and authenticity
This script aims to ensure reproducible and policy-compliant Apache releases.
| Tool | Purpose |
|---|---|
| git | Source control |
| sha512sum | SHA-512 checksum generation |
| tar / gtar | Source packaging |
| gpg | Artifact signing |
| xmllint | Parsing pom.xml |
- macOS:
brew install coreutils gnu-tar gnupg- Linux (Debian/Ubuntu):
sudo apt install coreutils tar gnupg libxml2-utils-
Must be run from the root of a Cloudberry Git clone, or specify
--repo <path> -
Working tree must be clean (no uncommitted changes)
-
Official releases must use upstream remote:
git@github.com:apache/cloudberry.gitUse
--skip-remote-checkonly for testing or forks.
You must have a valid Apache GPG key imported:
gpg --list-keys your@apache.org
If missing, generate or import your key before proceeding.
The script enforces semantic versioning with an incubator suffix:
<MAJOR>.<MINOR>.<PATCH>-incubating
<MAJOR>.<MINOR>.<PATCH>-incubating-rc<N>
Examples:
- 2.0.0-incubating
- 2.0.0-incubating-rc1
The following files must match the base version (without -rc):
| File | Expected Value |
|---|---|
| configure.ac | Base version |
| configure | Base version |
| pom.xml | Base version |
| gpversion.py | MAIN_VERSION = [MAJOR,99]
|
If any mismatch exists, the script will abort.
./cloudberry-release.sh --stage \
--tag 2.0.0-incubating-rc1 \
--gpg-user your@apache.org./cloudberry-release.sh --stage \
--tag 2.0.0-incubating-rc1 \
--force-tag-reuse \
--gpg-user your@apache.org
./cloudberry-release.sh --stage \
--tag 2.0.0-incubating-rc1 \
--skip-signing
⚠️ Do not use this for official Apache releases.
./cloudberry-release.sh --stage \
--tag 2.0.0-incubating-rc1 \
--repo ~/cloudberry \
--gpg-user your@apache.orgEnsures consistent cross-platform behavior.
Ensures all version files are aligned with the release tag.
- Prevents tag mutation
- Allows reuse only when explicitly forced and matches HEAD
Ensures all submodules are initialized:
git submodule update --init --recursiveRecursively archives repository and submodules
- Excludes macOS metadata files (
._*,.DS_Store,__MACOSX) when under macOS - Adds
BUILD_NUMBERfile for traceability
- Generates
.sha512 - Generates
.ascsignature - Verifies integrity and authenticity
Artifacts are moved into an artifacts/ directory.
Typical outputs:
apache-cloudberry-2.0.0-incubating-rc1-src.tar.gz
apache-cloudberry-2.0.0-incubating-rc1-src.tar.gz.sha512
apache-cloudberry-2.0.0-incubating-rc1-src.tar.gz.asc
- Ensure versions are updated in all required files
- Ensure working tree is clean
- Run
cloudberry-release.sh - Upload artifacts to Apache dist staging (SVN)
- Start community vote on dev@cloudberry.apache.org
- After vote passes, publish to Apache dist release area
- Tags must be immutable
- Always use
-rc<N>for voting candidates - Never upload unsigned artifacts to Apache dist
- Keep release process reproducible and scripted
- Use mailing list voting per ASF policy
-
Missing Tools
The script prints platform-specific installation guidance.
-
Version Mismatch
Update version in all files and rerun autoconf:
autoconf
Please use autoconf 2.69 on Rocky Linux 9 to generate the new configure file.
-
GPG Key Not Found
Import or generate your Apache GPG key.