This is an automated email from the ASF dual-hosted git repository.
philo-he pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gluten.git
The following commit(s) were added to refs/heads/main by this push:
new 440487d7de [VL] Fix release packaging and rewrite the release guide
(#12761)
440487d7de is described below
commit 440487d7de8e5bbccb64332a51bf745c652bcb2b
Author: Philo He <[email protected]>
AuthorDate: Mon Aug 17 09:04:51 2026 +0800
[VL] Fix release packaging and rewrite the release guide (#12761)
---
dev/release/package-release.sh | 36 +++-
docs/developers/HowToRelease.md | 434 +++++++++++++++++++++++++++++-----------
2 files changed, 351 insertions(+), 119 deletions(-)
diff --git a/dev/release/package-release.sh b/dev/release/package-release.sh
index 930a8f41da..daf91e22a9 100755
--- a/dev/release/package-release.sh
+++ b/dev/release/package-release.sh
@@ -34,15 +34,28 @@ RELEASE_VERSION=${TAG_VERSION%-rc*}
CURRENT_DIR=$(cd "$(dirname "$BASH_SOURCE")"; pwd)
GLUTEN_HOME=${CURRENT_DIR}/../../
if [ ! -d "$GLUTEN_HOME/release/" ]; then
- echo "Release directory does not exist."
+ echo "Release directory $GLUTEN_HOME/release/ does not exist."
+ exit 1
fi
+# The bundle JAR statically links third-party code, so per ASF policy the
binary
+# distribution must ship the LICENSE/NOTICE that cover it.
+LICENSE_BINARY="${GLUTEN_HOME}/LICENSE-binary"
+NOTICE_BINARY="${GLUTEN_HOME}/NOTICE-binary"
+for f in "$LICENSE_BINARY" "$NOTICE_BINARY"; do
+ if [[ ! -f "$f" ]]; then
+ echo "Missing $f, required for the binary distribution."
+ exit 1
+ fi
+done
+
pushd $GLUTEN_HOME/release/
-SPARK_VERSIONS="3.3 3.4 3.5 4.0"
+SPARK_VERSIONS="3.3 3.4 3.5 4.0 4.1"
for v in $SPARK_VERSIONS; do
- if [[ "$v" == "4.0" ]]; then
+ # Spark 4.x requires Scala 2.13; the spark-4.x Maven profiles enforce it.
+ if [[ "$v" == 4.* ]]; then
SCALA="2.13"
else
SCALA="2.12"
@@ -56,8 +69,16 @@ for v in $SPARK_VERSIONS; do
fi
echo "Packaging for Spark $v (Scala $SCALA)..."
- tar -czf apache-gluten-${RELEASE_VERSION}-bin-spark-${v}.tar.gz \
- $JAR
+ # Stage a versioned top-level directory so extracting does not scatter files
into the
+ # current directory, and so LICENSE/NOTICE travel with the JAR.
+ BIN_DIR="apache-gluten-${RELEASE_VERSION}-bin-spark-${v}"
+ rm -rf "${BIN_DIR}"
+ mkdir -p "${BIN_DIR}"
+ cp "$JAR" "${BIN_DIR}/"
+ cp "$LICENSE_BINARY" "${BIN_DIR}/LICENSE"
+ cp "$NOTICE_BINARY" "${BIN_DIR}/NOTICE"
+ tar -czf "${BIN_DIR}.tar.gz" "${BIN_DIR}"
+ rm -rf "${BIN_DIR}"
done
SRC_ZIP="${TAG}.zip"
@@ -69,6 +90,7 @@ unzip -q ${SRC_ZIP}
# Rename folder to remove "rc*" for formal release.
mv gluten-${TAG_VERSION} ${SRC_DIR}
+
# Remove .git and .github and other unwanted files from the source dir.
rm -rf ${SRC_DIR}/.git \
${SRC_DIR}/.github \
@@ -76,6 +98,10 @@ rm -rf ${SRC_DIR}/.git \
${SRC_DIR}/.gitignore \
${SRC_DIR}/.gitmodules \
${SRC_DIR}/.idea
+rm -f "${SRC_DIR}/dev/vcpkg/.gitignore" \
+ "${SRC_DIR}/gluten-uniffle/.gitkeep" \
+ "${SRC_DIR}/tools/qualification-tool/.gitignore"
+
tar -czf apache-gluten-${RELEASE_VERSION}-src.tar.gz ${SRC_DIR}
rm -r ${SRC_ZIP} ${SRC_DIR}
diff --git a/docs/developers/HowToRelease.md b/docs/developers/HowToRelease.md
index fdf042d57c..8025f3e45f 100644
--- a/docs/developers/HowToRelease.md
+++ b/docs/developers/HowToRelease.md
@@ -16,6 +16,71 @@ for a release of Apache Gluten project with the Velox
backend.
2. Linux
3. Docker
+## Pre-release Checks
+
+Complete all of these **before cutting the release candidate tag**. Each one
corresponds to an issue
+previously raised during a release vote, so skipping them tends to cost an
extra release candidate.
+
+### Tag the Velox revision this release builds against
+
+`ep/build-velox/src/get-velox.sh` pins the Velox fork and branch used by the
native build:
+
+```bash
+VELOX_REPO=https://github.com/IBM/velox.git
+VELOX_BRANCH=branch-1.7-dft
+```
+
+The build resolves that branch to whatever commit it happens to point at, via
`git ls-remote`. The
+branch keeps moving, so rebuilding the same Gluten tag later would pick up
different Velox code.
+
+Create a tag in the [IBM/velox](https://github.com/IBM/velox) repository for
the commit this release
+is built against, so the native side stays reproducible for as long as the
Gluten release exists.
+
+### Set the release version and remove leftover `-SNAPSHOT` strings
+
+```bash
+bash dev/release/bump-version.sh 1.7.0
+```
+
+`bump-version.sh` runs `versions:set` on the POMs under the repository root,
`tools/gluten-it`,
+`tools/qualification-tool` and `gluten-flink`. It does **not** touch versions
hardcoded elsewhere,
+for example `dev/info.sh` and the docs under `gluten-flink/docs/`. Check for
anything it missed:
+
+```bash
+git grep -nIE '[0-9]+\.[0-9]+\.[0-9]+-SNAPSHOT'
+```
+
+Gluten's own version must not appear as `-SNAPSHOT` in the result. References
to third-party
+snapshots, such as `velox4j` and `spark-sql-perf`, are expected to remain.
+
+A previous RC was voted `+0` because the source distribution still carried
`-SNAPSHOT` versions,
+including stale ones left over from an earlier release. Clean up all of them,
not just the current
+version.
+
+The version bump must be committed **before** the release candidate tag is
created, since the source
+archive is generated from that tag. A tag that still carries `-SNAPSHOT`
cannot be released and
+requires cutting a new candidate.
+
+### Update `LICENSE-binary` and `NOTICE-binary`
+
+The bundle JAR statically links third-party code, and `package-release.sh`
ships `LICENSE-binary`
+and `NOTICE-binary` inside each binary tarball as `LICENSE` and `NOTICE`.
Whenever a bundled
+component is added or enabled, its copyright and license must be recorded
there.
+
+A previous RC was voted `-1` because Hudi and Paimon had been enabled in the
binaries without
+being added to `NOTICE-binary`.
+
+### Check license headers
+
+```bash
+# Requires the `regex` Python package: pip install regex
+python3 dev/check.py header main
+```
+
+Reviewers also run [Apache RAT](https://creadur.apache.org/rat/) against the
source archive. Note
+that RAT flags `.ipynb` notebooks, which cannot carry a comment header; the
convention is to place
+the license text in the notebook's first markdown cell.
+
## Steps to Create a Release
A standard release distribution can be created following the below steps.
@@ -26,8 +91,8 @@ Pull and download the build environment docker image. The
docker image is period
built and uploaded to DockerHub by scheduled GitHub Actions jobs.
```bash
-docker pull apache/gluten:vcpkg-centos-7
-docker run -it apache/gluten:vcpkg-centos-7 bash
+docker pull apache/gluten:vcpkg-centos-7-gcc13
+docker run -it apache/gluten:vcpkg-centos-7-gcc13 bash
```
### Clone the repository
@@ -35,10 +100,10 @@ docker run -it apache/gluten:vcpkg-centos-7 bash
In the docker container created by the last step, execute the following
command to
clone the repository of Gluten with a specific git tag that you want to build
on.
-We are taking `v1.6.0-example-rc3` as an example git tag in this guide.
+We are taking `v1.7.0-rc0` as an example git tag in this guide.
```bash
-git clone --branch v1.6.0-example-rc3 https://github.com/apache/gluten.git
/workspace
+git clone --branch v1.7.0-rc0 https://github.com/apache/gluten.git /workspace
```
### Build
@@ -50,7 +115,16 @@ cd /workspace
bash dev/release/build-release.sh
```
-### Copy the target binaries to release directory
+Alternatively, let CI do it. `.github/workflows/build_release.yml` runs the
same
+`dev/release/build-release.sh` in the same container, and is triggered
automatically when a tag
+matching `v*` is pushed — including the release candidate tag, for example
`v1.7.0-rc0`. Download the
+`build-velox-backend-release-packages` artifact from that workflow run instead
of building locally.
+
+### Collect the bundle JARs into the release directory
+
+`package-release.sh` reads from `$GLUTEN_HOME/release/`, which is not created
by the build. Create it
+yourself and place one bundle JAR per supported Spark version inside, taken
either from a local build
+or from the workflow artifact above.
```bash
cd /workspace
@@ -58,6 +132,19 @@ mkdir -p release
cp -R package/target/* release/
```
+The directory should end up holding these five JARs, matching the Spark and
Scala combinations
+`package-release.sh` expects:
+
+```
+gluten-velox-bundle-spark3.3_2.12-linux_amd64-1.7.0.jar
+gluten-velox-bundle-spark3.4_2.12-linux_amd64-1.7.0.jar
+gluten-velox-bundle-spark3.5_2.12-linux_amd64-1.7.0.jar
+gluten-velox-bundle-spark4.0_2.13-linux_amd64-1.7.0.jar
+gluten-velox-bundle-spark4.1_2.13-linux_amd64-1.7.0.jar
+```
+
+A missing or misnamed JAR makes `package-release.sh` fail with the Spark
version it could not find.
+
### Package the release sources and binaries
By following this step you will create the release distribution that comply
with the common name
@@ -67,7 +154,7 @@ Note, the current tag should be specified when running this
script.
```bash
cd /workspace
-bash dev/release/package-release.sh v1.6.0-example-rc3
+bash dev/release/package-release.sh v1.7.0-rc0
```
### Check the created release distribution
@@ -76,111 +163,203 @@ Confirm that all the needed sources and binaries are
successfully created at the
`$GLUTEN_HOME/release/`.
```bash
-[root@8de83f716f0f workspace]# ls -l release/
-total 481628
--rw-r--r--. 1 root root 74396439 Oct 14 14:19
apache-gluten-1.6.0-example-src.tar.gz
--rw-r--r--. 1 root root 104767582 Oct 14 14:19
apache-gluten-1.6.0-example-bin-spark-3.3.tar.gz
--rw-r--r--. 1 root root 104625356 Oct 14 14:19
apache-gluten-1.6.0-example-bin-spark-3.4.tar.gz
--rw-r--r--. 1 root root 104595103 Oct 14 14:19
apache-gluten-1.6.0-example-bin-spark-3.5.tar.gz
+ls -1 release/*.tar.gz
+```
+
+```
+release/apache-gluten-1.7.0-src.tar.gz
+release/apache-gluten-1.7.0-bin-spark-3.3.tar.gz
+release/apache-gluten-1.7.0-bin-spark-3.4.tar.gz
+release/apache-gluten-1.7.0-bin-spark-3.5.tar.gz
+release/apache-gluten-1.7.0-bin-spark-4.0.tar.gz
+release/apache-gluten-1.7.0-bin-spark-4.1.tar.gz
+```
+
+Each binary tarball contains a versioned top-level directory holding the
bundle JAR along with
+the `LICENSE` and `NOTICE` that cover the third-party code statically linked
into it.
+
+```bash
+tar -tzf release/apache-gluten-1.7.0-bin-spark-3.5.tar.gz
+```
+
+```
+apache-gluten-1.7.0-bin-spark-3.5/
+apache-gluten-1.7.0-bin-spark-3.5/LICENSE
+apache-gluten-1.7.0-bin-spark-3.5/NOTICE
+apache-gluten-1.7.0-bin-spark-3.5/gluten-velox-bundle-spark3.5_2.12-linux_amd64-1.7.0.jar
```
<!--- Moved from
https://github.com/apache/gluten-site/blob/main/_docs/v1.3.0/developers/HowToRelease.md
--->
# Publish the Release
This section outlines the steps for releasing Apache Gluten according to the
Apache release guidelines.
-All projects under the Apache umbrella must adhere to the [Apache Release
Policy](https://www.apache.org/legal/release-policy.html). This guide is
designed to assist you in comprehending the policy and navigating the process
of releasing projects at Apache.
+All projects under the Apache umbrella must adhere to the [Apache Release
Policy](https://www.apache.org/legal/release-policy.html).
+This guide is designed to assist you in comprehending the policy and
navigating the process of releasing projects at Apache.
## Release Process
-1. Prepare the release artifacts.
+Work through the steps in order. They assume the tarballs from the previous
section exist under
+`$GLUTEN_HOME/release/`.
-2. Upload the release artifacts to the SVN repository.
+Throughout, replace `<asf-id>` with your ASF id, `<asf-id>@apache.org` with
your ASF email, and
+`1.7.0` / `1.7.0-rc0` with the version being released.
-3. Verify the release artifacts.
+Note the artifact **file names carry no `rc` suffix** — `package-release.sh`
strips it. A release
+candidate is identified only by the SVN directory it is staged in,
`1.7.0-rc0`. That is why a
+passing vote needs no re-signing: the same files simply move to
`release/gluten/1.7.0/`.
-4. Initiate a release vote.
+### 1. Confirm the tag and record the commit id
-5. Announce the results and the release.
+The tag must already exist on GitHub with draft release notes, since the
source tarball is built
+from it. Record the commit id for the vote email:
+```bash
+git rev-parse v1.7.0-rc0
+```
-### Prepare the release artifacts.
+### 2. Preflight the artifacts
-1. Create a branch from the target git repository.
+Once the artifacts are signed and uploaded, any change requires a new release
candidate, so check
+the structure first:
-2. Tag a RC and draft the release notes.
+```bash
+cd $GLUTEN_HOME/release/
-3. Build and Sign the release artifacts (including source archives, binaries,
...etc).
+# Each binary tarball: a versioned top-level directory holding the JAR,
LICENSE and NOTICE.
+for f in apache-gluten-1.7.0-bin-spark-*.tar.gz; do echo "== $f"; tar -tzf
"$f"; done
-4. Generate checksums for the artifacts.
+# Source tarball: check the top-level directory name and that dot directories
are gone.
+tar -tzf apache-gluten-1.7.0-src.tar.gz | head -20
+tar -tzf apache-gluten-1.7.0-src.tar.gz | grep -E '/\.(git|github|idea)' ||
echo " clean"
+```
+### 3. Prepare the signing key
-#### How to Sign the release artifacts.
+Reuse your existing key if you have it; a new key means every reviewer must
re-import `KEYS`. To
+move a key to another machine, export it with `gpg --export-secret-keys
--armor <KEYID>`, transfer
+it over a secure channel, and `gpg --import` it there.
-1. Create a GPG key
+Create one only if the previous key is unrecoverable:
-2. Add the GPG key to the KEYS file
+```bash
+gpg --full-generate-key
+```
-3. Sign the release artifacts with the GPG key.
+Choose **RSA and RSA**, **4096** bits, and no expiry. Use your ASF email in
the UID: reviewers check
+that the signing key maps to a committer. Set a long passphrase and record it
in a password
+manager — a key you cannot unlock is as lost as one you no longer have.
```bash
-# create a GPG key, after executing this command, select "RSA and RSA"
-$ gpg --full-generate-key
+gpg --list-keys --keyid-format SHORT <asf-id>@apache.org
+gpg --keyserver keyserver.ubuntu.com --send-key <asf-id>@apache.org
-# list the GPG keys
-$ gpg --keyid-format SHORT --list-keys
+# Confirm the key can sign.
+echo test > /tmp/t \
+ && gpg --local-user <asf-id>@apache.org --armor --detach-sig /tmp/t \
+ && gpg --verify /tmp/t.asc /tmp/t
+```
+
+On distributions that ship a cut-down GnuPG, `gpg --full-generate-key` fails
with
+`can't connect to the gpg-agent`. On Amazon Linux 2023, install the full
package:
-# upload the GPG key to the key server, xxx is the GPG key id
-# eg: pub rsa4096/4C21E346 2024-05-06 [SC], 4C21E346 is the GPG key id;
-$ gpg --keyserver keyserver.ubuntu.com --send-key xxx
+```bash
+sudo dnf swap gnupg2-minimal gnupg2 -y
+```
-# append the GPG key to the KEYS file the svn repository
-# [IMPORTANT] Don't replace the KEYS file, just append the GPG key to the KEYS
file.
-$ svn co https://dist.apache.org/repos/dist/release/gluten/
-$ (gpg --list-sigs [email protected] && gpg --export --armor [email protected]) >>
KEYS
-$ svn ci -m "add gpg key"
+### 4. Back up the key
-# sign the release artifacts, xxxx is [email protected]
-$ for i in *.tar.gz; do echo $i; gpg --local-user xxxx --armor --output $i.asc
--detach-sig $i ; done
+```bash
+gpg --export-secret-keys --armor <asf-id>@apache.org > ~/gluten-signing-key.asc
```
+Move that file to offline storage and delete it from the machine. Together
with the passphrase in
+your password manager, this is what lets the next release reuse the key.
-#### How to Generate checksums for the release artifacts.
+### 5. Append the key to KEYS, before the vote
```bash
-# create the checksums
-$ for i in *.tar.gz; do echo $i; sha512sum $i > $i.sha512 ; done
+svn co --depth files --username <asf-id> \
+ https://dist.apache.org/repos/dist/release/gluten/ ~/svn-gluten-release
+cd ~/svn-gluten-release
+(gpg --list-sigs <asf-id>@apache.org && gpg --export --armor
<asf-id>@apache.org) >> KEYS
+svn ci --username <asf-id> -m "Add GPG key for <asf-id>@apache.org"
```
+The SVN password is your ASF LDAP password from <https://id.apache.org>, not
the GPG passphrase.
-### Upload the release artifacts to the SVN repository.
+Append; never replace. Older key blocks must stay, because they still verify
previously released
+artifacts.
-1. Create a project directory in the SVN repository (1st time only).
- `https://dist.apache.org/repos/dist/dev/gluten/`
+`KEYS` lives in the **release** directory, not `dev`, so that it is served from
+<https://downloads.apache.org/gluten/KEYS>. Confirm it appears there before
starting the vote and
+reference that URL in the vote email: a previous vote had to be corrected
mid-thread because it
+pointed reviewers at a `dist.apache.org/repos/dist/dev/` link instead.
Propagation takes a few
+minutes.
-2. Create a directory for the release artifacts in the SVN repository.
- `https://dist.apache.org/repos/dist/dev/gluten/{release-version}`
- release-version format: apache-gluten-#.#.#-rc#
+### 6. Sign the artifacts
-3. Upload the release artifacts to the SVN repository.
```bash
-$ svn co https://dist.apache.org/repos/dist/dev/gluten/
-$ cp /path/to/release/artifacts/* ./{release-version}/
-$ svn add ./{release-version}/*
-$ svn commit -m "add Apache Gluten release artifacts for {release-version}"
+cd $GLUTEN_HOME/release/
+for i in *.tar.gz; do
+ echo "$i"
+ gpg --local-user <asf-id>@apache.org --armor --output "$i.asc" --detach-sig
"$i"
+done
```
-4. After the upload, please visit the link
`https://dist.apache.org/repos/dist/dev/gluten/{release-version}` to verify if
the file upload is successful or not.
- The upload release artifacts should be include
+`gpg-agent` caches the passphrase, so it is entered once rather than per file.
+
+### 7. Generate checksums
+
+```bash
+for i in *.tar.gz; do echo "$i"; sha512sum "$i" > "$i.sha512"; done
+```
+
+### 8. Verify your own artifacts
+
+```bash
+for i in *.tar.gz; do gpg --verify "$i.asc" "$i"; done
+for i in *.tar.gz; do sha512sum --check "$i.sha512"; done
+ls -1 | wc -l
+```
+
+Expect three files per archive — the tarball, its `.asc` and its `.sha512`.
+
+### 9. Upload to the dev staging area
+
+`--depth immediates` avoids downloading every previous release, which matters
at roughly 100 MB per
+tarball:
+
```bash
-* apache-gluten-#.#.#-src.tar.gz
-* apache-gluten-#.#.#-src.tar.gz.asc
-* apache-gluten-#.#.#-src.tar.gz.sha512
+svn co --depth immediates --username <asf-id> \
+ https://dist.apache.org/repos/dist/dev/gluten/ ~/svn-gluten-dev
+cd ~/svn-gluten-dev
+mkdir 1.7.0-rc0
+cp $GLUTEN_HOME/release/*.tar.gz* 1.7.0-rc0/
+svn add 1.7.0-rc0
+svn ci --username <asf-id> -m "Add Apache Gluten 1.7.0-rc0 release artifacts"
```
+The project directory `https://dist.apache.org/repos/dist/dev/gluten/` only
needs creating once,
+for the first ever release.
-### Verify the release artifacts.
+### 10. Confirm the upload
-Please follow below steps to verify the release artifacts.
+Visit <https://dist.apache.org/repos/dist/dev/gluten/1.7.0-rc0/> and confirm
the source archive plus
+one binary archive per supported Spark version, each with its `.asc` and
`.sha512`:
+
+```
+apache-gluten-1.7.0-src.tar.gz{,.asc,.sha512}
+apache-gluten-1.7.0-bin-spark-3.3.tar.gz{,.asc,.sha512}
+apache-gluten-1.7.0-bin-spark-3.4.tar.gz{,.asc,.sha512}
+apache-gluten-1.7.0-bin-spark-3.5.tar.gz{,.asc,.sha512}
+apache-gluten-1.7.0-bin-spark-4.0.tar.gz{,.asc,.sha512}
+apache-gluten-1.7.0-bin-spark-4.1.tar.gz{,.asc,.sha512}
+```
+
+## Verifying a Release Candidate
+
+This section is for anyone voting on a candidate, including the release
manager before calling the
+vote.
1. Check if the Download links are valid.
@@ -195,13 +374,13 @@ Please follow below steps to verify the release artifacts.
6. No unlicensed compiled archives bundled in source archive.
-#### How to Verify the Signatures
+### How to Verify the Signatures
Please follow below steps to verify the signatures.
```bash
# download KEYS
-$ curl https://dist.apache.org/repos/dist/release/gluten/KEYS > KEYS
+$ curl https://downloads.apache.org/gluten/KEYS > KEYS
# import KEYS and trust the key, please replace the email address with the one
you want to trust.
$ gpg --import KEYS
@@ -221,7 +400,7 @@ $ for i in *.tar.gz; do echo $i; gpg --verify $i.asc $i ;
done
```
-#### How to Verify the checksums
+### How to Verify the checksums
Please follow below steps to verify the checksums
```bash
@@ -229,82 +408,97 @@ Please follow below steps to verify the checksums
$ for i in *.tar.gz; do echo $i; sha512sum --check $i.sha512; done
```
-### Initiate a release vote.
+## Voting and Publishing
-1. Email a vote request to [email protected], requiring at least 3 PMC
+1s.
+### 11. Initiate the release vote
-2. Allow 72 hours or until enough votes are collected.
+Email a vote request to [email protected], requiring at least 3 PMC +1s.
Keep it open for at
+least 72 hours or until enough votes are collected. Gluten is a Top-Level
Project, so this is the
+only vote required; there is no `[email protected]` stage.
-3. Share the vote outcome on the dev list.
+If the candidate is signed with a key that was not used for previous releases,
say so in the email,
+otherwise reviewers with the old key cached will hit a verification failure.
Vote Email Template
```
-[VOTE] Release Apache Gluten {release-version}
+[VOTE] Release Apache Gluten 1.7.0 (RC0)
-Hello,
+Hello everyone,
- This is a call for vote to release Apache Gluten version {release-version}.
+This is a call for a vote to release Apache Gluten version 1.7.0 (RC0).
- The vote thread:
- https://lists.apache.org/thread/{id}
+The release candidates:
+https://dist.apache.org/repos/dist/dev/gluten/1.7.0-rc0/
- Vote Result:
- https://lists.apache.org/thread/{id}
+Release notes:
+https://github.com/apache/gluten/releases/tag/v1.7.0-rc0
- The release candidates:
- https://dist.apache.org/repos/dist/dev/gluten/{release-version}/
-
- Release notes:
- https://github.com/apache/gluten/releases/tag/{release-version}
+Git commit id for the release:
+https://github.com/apache/gluten/commit/{commit-id}
- Git tag for the release:
- https://github.com/apache/gluten/releases/tag/{release-version}
-
- Git commit id for the release:
- https://github.com/apache/gluten/commit/{id}
+Keys to verify the Release Candidate:
+https://downloads.apache.org/gluten/KEYS
- Keys to verify the Release Candidate:
- https://downloads.apache.org/gluten/KEYS
-
- The vote will be open for at least 72 hours or until the necessary number
of votes are reached.
+The vote will be open for at least 72 hours or until the necessary number
+of votes are reached.
- Please vote accordingly:
+Please vote accordingly:
- [ ] +1 approve
- [ ] +0 no opinion
- [ ] -1 disapprove with the reason
+[ ] +1 approve
+[ ] +0 no opinion
+[ ] -1 disapprove (please provide reason)
- Checklist for reference:
+Checklist for reference:
- [ ] Download links are valid.
- [ ] Checksums and PGP signatures are valid.
- [ ] Source code distributions have correct names matching the current
release.
- [ ] LICENSE and NOTICE files are correct for each Apache Gluten repo.
- [ ] All files have license headers if necessary.
- [ ] No unlicensed compiled archives bundled in source archive.
+[ ] Download links are valid
+[ ] Checksums and PGP signatures are valid
+[ ] Source code distributions have correct names, matching the current release
+[ ] LICENSE and NOTICE files are correct
+[ ] All files have license headers if necessary
+[ ] No unlicensed compiled archives are bundled in the source archive
+[ ] Other (please specify):
- To compile from the source, please refer to:
-
- https://github.com/apache/gluten#building-from-source
+To compile from the source, please refer to:
+https://github.com/apache/gluten/tree/v1.7.0-rc0#build-from-source
Thanks,
-<YOUR NAME>
+{YOUR NAME}
+```
+
+Add this line under the KEYS link when the candidate is signed with a new key:
+
+```
+Note: this release is signed with a new GPG key. Please re-import KEYS
+before verifying the signatures.
```
-### Announce the results and the release.
+The build reference is pinned to the candidate's tag rather than `main`, so
the instructions match
+the code being voted on.
+
+### 12. Publish the vote result
+
+Send a `[RESULT][VOTE]` email to [email protected] summarising the
binding and non-binding
+votes, and linking the vote thread.
+
+If the vote did not pass, address the findings, tag the next candidate, and
repeat from step 6 into
+a new `1.7.0-rc1` staging directory. The signing key and its `KEYS` entry
carry over.
+
+### 13. Announce the results and the release
Announce Email Template
```
+[ANNOUNCE] Apache Gluten 1.7.0 released
+
Hello everyone,
-The Apache Gluten {release-version} has been released!
+The Apache Gluten 1.7.0 has been released!
-Apache Gluten is a middle layer responsible for offloading JVM-based SQL
engines' execution to native engines.
+A Middle Layer for Offloading JVM-Based SQL Execution to Native Engines
Download Links: https://downloads.apache.org/gluten/
-Release Notes: https://github.com/apache/gluten/releases/tag/{release-version}
+Release Notes: https://github.com/apache/gluten/releases/tag/v1.7.0
Website: https://gluten.apache.org/
@@ -314,12 +508,24 @@ Resources:
Thanks,
<YOUR NAME>
-
```
-### Migrate candidate to the release Apache SVN
+### 14. Migrate candidate to the release Apache SVN
-After the vote has passed, you need to migrate the RC build release to an
official release by moving the artifacts from Apache SVN's dev directory to the
release directory. Please follow the steps below to upload the artifacts:
-```
-$ svn mv https://dist.apache.org/repos/dist/dev/gluten/{release-version}
https://dist.apache.org/repos/dist/release/gluten/{release-version} -m
"transfer packages for gluten {release-version}"
+After the vote has passed, promote the candidate by moving the artifacts from
Apache SVN's `dev`
+directory to the `release` directory. Note the `rc` suffix is dropped from the
directory name; the
+file names and signatures are unchanged, so nothing is re-signed.
+
+```bash
+svn mv --username <asf-id> \
+ https://dist.apache.org/repos/dist/dev/gluten/1.7.0-rc0 \
+ https://dist.apache.org/repos/dist/release/gluten/1.7.0 \
+ -m "Transfer packages for Apache Gluten 1.7.0"
```
+
+### 15. Finish up
+
+- Publish the GitHub release for the tag.
+- Update the download page on the website.
+- Bump the development version on the release branch with
+ `bash dev/release/bump-version.sh <next-version>-SNAPSHOT`.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]