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]

Reply via email to