This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit d41fa3a63e65782732cb7c14983745faa2b8d95d
Author: Carl Marcum <[email protected]>
AuthorDate: Sun Mar 29 14:01:04 2026 -0400

    fix for running without an optional download dir and add script 
descriptions in headers.
    
    Co-authored-by: Paul King <[email protected]>
    Co-authored-by: Jonny Carter <[email protected]>
---
 etc/bin/download-release-artifacts.sh | 21 ++++++++++++++++----
 etc/bin/verify-binary-distribution.sh | 36 +++++++++++++++++++++++++----------
 etc/bin/verify-docs-distribution.sh   | 36 +++++++++++++++++++++++++----------
 etc/bin/verify-sdk-distribution.sh    | 36 +++++++++++++++++++++++++----------
 etc/bin/verify-source-distribution.sh | 36 +++++++++++++++++++++++++----------
 etc/bin/verify.sh                     | 21 ++++++++++++++++++++
 6 files changed, 142 insertions(+), 44 deletions(-)

diff --git a/etc/bin/download-release-artifacts.sh 
b/etc/bin/download-release-artifacts.sh
index 9b21a41250..f52f818a83 100755
--- a/etc/bin/download-release-artifacts.sh
+++ b/etc/bin/download-release-artifacts.sh
@@ -17,6 +17,19 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# download-release-artifacts.sh - Download Groovy release artifacts from 
dist.apache.org.
+#
+# Fetches the source, binary, doc, and sdk distribution zip files, their GPG 
signatures (.asc), and checksum
+# files (.sha256) into a local directory for offline verification.
+#
+# Artifacts are downloaded from:
+#   https://dist.apache.org/repos/dist/{dev|release}/groovy/<version>/
+#
+# Usage:
+#   download-release-artifacts.sh <dev|release> <version> [download-dir]
+#
+
 set -e
 
 if [ $# -lt 2 ]; then
@@ -49,24 +62,24 @@ VERSION=${VERSION#v} # in case someone prefixes a v
 # download into subdirs because they unpack into the same directory name
 # Source distro
 
-echo "Downloading SVN source release files"
+echo "Downloading source release files"
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/src/apache-${PROJECT_NAME}-src-${VERSION}.zip" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/sources/apache-${PROJECT_NAME}-src-${VERSION}.zip";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/src/apache-${PROJECT_NAME}-src-${VERSION}.zip.asc" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/sources/apache-${PROJECT_NAME}-src-${VERSION}.zip.asc";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/src/apache-${PROJECT_NAME}-src-${VERSION}.zip.sha256" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/sources/apache-${PROJECT_NAME}-src-${VERSION}.zip.sha256";
 
 # Binary distro
 
-echo "Downloading SVN distribution binary files"
+echo "Downloading distribution binary files"
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/binary/apache-${PROJECT_NAME}-binary-${VERSION}.zip" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-binary-${VERSION}.zip";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/binary/apache-${PROJECT_NAME}-binary-${VERSION}.zip.asc" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-binary-${VERSION}.zip.asc";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/binary/apache-${PROJECT_NAME}-binary-${VERSION}.zip.sha256"
 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-binary-${VERSION}.zip.sha256";
 
-echo "Downloading SVN distribution docs files"
+echo "Downloading distribution docs files"
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/docs/apache-${PROJECT_NAME}-docs-${VERSION}.zip" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-docs-${VERSION}.zip";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/docs/apache-${PROJECT_NAME}-docs-${VERSION}.zip.asc" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-docs-${VERSION}.zip.asc";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/docs/apache-${PROJECT_NAME}-docs-${VERSION}.zip.sha256" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-docs-${VERSION}.zip.sha256";
 
-echo "Downloading SVN distribution sdk files"
+echo "Downloading distribution sdk files"
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/sdk/apache-${PROJECT_NAME}-sdk-${VERSION}.zip" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-sdk-${VERSION}.zip";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/sdk/apache-${PROJECT_NAME}-sdk-${VERSION}.zip.asc" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-sdk-${VERSION}.zip.asc";
 curl -f -L -o 
"${DOWNLOAD_LOCATION}/sdk/apache-${PROJECT_NAME}-sdk-${VERSION}.zip.sha256" 
"https://dist.apache.org/repos/dist/${DIST_TYPE}/groovy/${VERSION}/distribution/apache-${PROJECT_NAME}-sdk-${VERSION}.zip.sha256";
diff --git a/etc/bin/verify-binary-distribution.sh 
b/etc/bin/verify-binary-distribution.sh
index a4253d8f99..bd78655b2d 100755
--- a/etc/bin/verify-binary-distribution.sh
+++ b/etc/bin/verify-binary-distribution.sh
@@ -17,6 +17,22 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# verify-binary-distribution.sh - Verify a downloaded Groovy binary 
distribution.
+#
+# Expects the download directory to contain SVN_KEYS (the Groovy project KEYS
+# file) and a binary/ subdirectory with the zip, .asc, and .sha256 files, as
+# produced by download-release-artifacts.sh.
+#
+# Performs the following checks:
+#   1. SHA-256 checksum verification
+#   2. GPG signature verification (using an isolated temporary keyring)
+#   3. Extraction and presence of LICENSE and NOTICE
+#
+# Usage:
+#   verify-binary-distribution.sh <version> [download-dir]
+#
+
 set -euo pipefail
 
 if [ $# -lt 1 ]; then
@@ -30,6 +46,16 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> 
/dev/null && pwd )
 
 VERSION=${VERSION#v} # in case someone prefixes a v
 
+export GROOVY_GPG_HOME=$(mktemp -d)
+cleanup() {
+  rm -rf "${GROOVY_GPG_HOME}"
+}
+trap cleanup EXIT
+
+echo "Importing GPG key to independent GPG home ..."
+gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
+echo "✅ GPG Key Imported"
+
 cd "${DOWNLOAD_LOCATION}/binary"
 ZIP_FILE=$(ls "apache-groovy-binary-${VERSION}.zip" 2>/dev/null | head -n 1)
 
@@ -38,12 +64,6 @@ if [ -z "${ZIP_FILE}" ]; then
   exit 1
 fi
 
-export GROOVY_GPG_HOME=$(mktemp -d)
-cleanup() {
-  rm -rf "${GROOVY_GPG_HOME}"
-}
-trap cleanup EXIT
-
 echo "Verifying checksum..."
 EXPECTED_HASH=$(cat apache-groovy-binary-${VERSION}.zip.sha256 | tr -d '\r\n')
 ACTUAL_HASH=$(shasum -a 256 apache-groovy-binary-${VERSION}.zip | awk '{print 
$1}')
@@ -54,10 +74,6 @@ else
     echo "✅ Checksum Verified"
 fi
 
-echo "Importing GPG key to independent GPG home ..."
-gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
-echo "✅ GPG Key Imported"
-
 echo "Verifying GPG signature..."
 gpg --homedir "${GROOVY_GPG_HOME}" --verify 
"apache-groovy-binary-${VERSION}.zip.asc" "apache-groovy-binary-${VERSION}.zip"
 echo "✅ GPG Verified"
diff --git a/etc/bin/verify-docs-distribution.sh 
b/etc/bin/verify-docs-distribution.sh
index 0082c9d0bc..df544f4b76 100755
--- a/etc/bin/verify-docs-distribution.sh
+++ b/etc/bin/verify-docs-distribution.sh
@@ -17,6 +17,22 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# verify-docs-distribution.sh - Verify a downloaded Groovy docs distribution.
+#
+# Expects the download directory to contain SVN_KEYS (the Groovy project KEYS
+# file) and a docs/ subdirectory with the zip, .asc, and .sha256 files, as
+# produced by download-release-artifacts.sh.
+#
+# Performs the following checks:
+#   1. SHA-256 checksum verification
+#   2. GPG signature verification (using an isolated temporary keyring)
+#   3. Extraction and presence of LICENSE and NOTICE
+#
+# Usage:
+#   verify-docs-distribution.sh <version> [download-dir]
+#
+
 set -euo pipefail
 
 if [ $# -lt 1 ]; then
@@ -30,6 +46,16 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> 
/dev/null && pwd )
 
 VERSION=${VERSION#v} # in case someone prefixes a v
 
+export GROOVY_GPG_HOME=$(mktemp -d)
+cleanup() {
+  rm -rf "${GROOVY_GPG_HOME}"
+}
+trap cleanup EXIT
+
+echo "Importing GPG key to independent GPG home ..."
+gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
+echo "✅ GPG Key Imported"
+
 cd "${DOWNLOAD_LOCATION}/docs"
 ZIP_FILE=$(ls "apache-groovy-docs-${VERSION}.zip" 2>/dev/null | head -n 1)
 
@@ -38,12 +64,6 @@ if [ -z "${ZIP_FILE}" ]; then
   exit 1
 fi
 
-export GROOVY_GPG_HOME=$(mktemp -d)
-cleanup() {
-  rm -rf "${GROOVY_GPG_HOME}"
-}
-trap cleanup EXIT
-
 echo "Verifying checksum..."
 EXPECTED_HASH=$(cat apache-groovy-docs-${VERSION}.zip.sha256 | tr -d '\r\n')
 ACTUAL_HASH=$(shasum -a 256 apache-groovy-docs-${VERSION}.zip | awk '{print 
$1}')
@@ -54,10 +74,6 @@ else
     echo "✅ Checksum Verified"
 fi
 
-echo "Importing GPG key to independent GPG home ..."
-gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
-echo "✅ GPG Key Imported"
-
 echo "Verifying GPG signature..."
 gpg --homedir "${GROOVY_GPG_HOME}" --verify 
"apache-groovy-docs-${VERSION}.zip.asc" "apache-groovy-docs-${VERSION}.zip"
 echo "✅ GPG Verified"
diff --git a/etc/bin/verify-sdk-distribution.sh 
b/etc/bin/verify-sdk-distribution.sh
index d41e710fc7..8ca0a03911 100755
--- a/etc/bin/verify-sdk-distribution.sh
+++ b/etc/bin/verify-sdk-distribution.sh
@@ -17,6 +17,22 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# verify-source-distribution.sh - Verify a downloaded Groovy sdk distribution.
+#
+# Expects the download directory to contain SVN_KEYS (the Groovy project KEYS
+# file) and a sdk/ subdirectory with the zip, .asc, and .sha256 files, as
+# produced by download-release-artifacts.sh.
+#
+# Performs the following checks:
+#   1. SHA-256 checksum verification
+#   2. GPG signature verification (using an isolated temporary keyring)
+#   3. Extraction and presence of LICENSE and NOTICE
+#
+# Usage:
+#   verify-sdk-distribution.sh <version> [download-dir]
+#
+
 set -euo pipefail
 
 if [ $# -lt 1 ]; then
@@ -30,6 +46,16 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> 
/dev/null && pwd )
 
 VERSION=${VERSION#v} # in case someone prefixes a v
 
+export GROOVY_GPG_HOME=$(mktemp -d)
+cleanup() {
+  rm -rf "${GROOVY_GPG_HOME}"
+}
+trap cleanup EXIT
+
+echo "Importing GPG key to independent GPG home ..."
+gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
+echo "✅ GPG Key Imported"
+
 cd "${DOWNLOAD_LOCATION}/sdk"
 ZIP_FILE=$(ls "apache-groovy-sdk-${VERSION}.zip" 2>/dev/null | head -n 1)
 
@@ -38,12 +64,6 @@ if [ -z "${ZIP_FILE}" ]; then
   exit 1
 fi
 
-export GROOVY_GPG_HOME=$(mktemp -d)
-cleanup() {
-  rm -rf "${GROOVY_GPG_HOME}"
-}
-trap cleanup EXIT
-
 echo "Verifying checksum..."
 EXPECTED_HASH=$(cat apache-groovy-sdk-${VERSION}.zip.sha256 | tr -d '\r\n')
 ACTUAL_HASH=$(shasum -a 256 apache-groovy-sdk-${VERSION}.zip | awk '{print 
$1}')
@@ -54,10 +74,6 @@ else
     echo "✅ Checksum Verified"
 fi
 
-echo "Importing GPG key to independent GPG home ..."
-gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
-echo "✅ GPG Key Imported"
-
 echo "Verifying GPG signature..."
 gpg --homedir "${GROOVY_GPG_HOME}" --verify 
"apache-groovy-sdk-${VERSION}.zip.asc" "apache-groovy-sdk-${VERSION}.zip"
 echo "✅ GPG Verified"
diff --git a/etc/bin/verify-source-distribution.sh 
b/etc/bin/verify-source-distribution.sh
index 7e2726ed2a..30397c382d 100755
--- a/etc/bin/verify-source-distribution.sh
+++ b/etc/bin/verify-source-distribution.sh
@@ -17,6 +17,22 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# verify-source-distribution.sh - Verify a downloaded Groovy source 
distribution.
+#
+# Expects the download directory to contain SVN_KEYS (the Groovy project KEYS
+# file) and a src/ subdirectory with the zip, .asc, and .sha256 files, as
+# produced by download-release-artifacts.sh.
+#
+# Performs the following checks:
+#   1. SHA-256 checksum verification
+#   2. GPG signature verification (using an isolated temporary keyring)
+#   3. Extraction and presence of LICENSE, NOTICE, and README.md
+#
+# Usage:
+#   verify-source-distribution.sh <version> [download-dir]
+#
+
 set -euo pipefail
 
 if [ $# -lt 1 ]; then
@@ -30,6 +46,16 @@ SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> 
/dev/null && pwd )
 
 VERSION=${VERSION#v} # in case someone prefixes a v
 
+export GROOVY_GPG_HOME=$(mktemp -d)
+cleanup() {
+  rm -rf "${GROOVY_GPG_HOME}"
+}
+trap cleanup EXIT
+
+echo "Importing GPG key to independent GPG home ..."
+gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
+echo "✅ GPG Key Imported"
+
 cd "${DOWNLOAD_LOCATION}/src"
 ZIP_FILE=$(ls "apache-groovy-src-${VERSION}.zip" 2>/dev/null | head -n 1)
 
@@ -38,12 +64,6 @@ if [ -z "${ZIP_FILE}" ]; then
   exit 1
 fi
 
-export GROOVY_GPG_HOME=$(mktemp -d)
-cleanup() {
-  rm -rf "${GROOVY_GPG_HOME}"
-}
-trap cleanup EXIT
-
 echo "Verifying checksum..."
 EXPECTED_HASH=$(cat apache-groovy-src-${VERSION}.zip.sha256 | tr -d '\r\n')
 ACTUAL_HASH=$(shasum -a 256 apache-groovy-src-${VERSION}.zip | awk '{print 
$1}')
@@ -54,10 +74,6 @@ else
     echo "✅ Checksum Verified"
 fi
 
-echo "Importing GPG key to independent GPG home ..."
-gpg --homedir "${GROOVY_GPG_HOME}" --import "${DOWNLOAD_LOCATION}/SVN_KEYS"
-echo "✅ GPG Key Imported"
-
 echo "Verifying GPG signature..."
 gpg --homedir "${GROOVY_GPG_HOME}" --verify 
"apache-groovy-src-${VERSION}.zip.asc" "apache-groovy-src-${VERSION}.zip"
 echo "✅ GPG Verified"
diff --git a/etc/bin/verify.sh b/etc/bin/verify.sh
index f138e45112..91404807f5 100755
--- a/etc/bin/verify.sh
+++ b/etc/bin/verify.sh
@@ -17,6 +17,25 @@
 #  specific language governing permissions and limitations
 #  under the License.
 #
+#
+# verify.sh - End-to-end release verification for Apache Groovy.
+#
+# Downloads staged artifacts from dist.apache.org, verifies their checksums
+# and GPG signatures, checks for required files (LICENSE, NOTICE, README.md),
+# and runs the Apache RAT license audit against the extracted source.
+#
+# The individual steps are delegated to companion scripts in this directory:
+#   download-release-artifacts.sh  - fetches the distribution artifacts and 
hashes
+#   verify-<type>-distribution.sh  - checks integrity, signatures, and contents
+#
+# Usage:
+#   verify.sh <dev|release> <version> [download-dir]
+#
+# Examples:
+#   verify.sh dev 8.0.1 /tmp/geb-verify   # verify a staging candidate
+#   verify.sh release 8.0.0               # verify a published release
+#
+
 set -euo pipefail
 
 if [ $# -lt 2 ]; then
@@ -96,6 +115,8 @@ else
   echo "Gradle Bootstrap not needed ..."
 fi
 
+cd -
+
 echo "Applying License Audit ..."
 cd "${DOWNLOAD_LOCATION}/src/groovy-${VERSION}"
 ./gradlew rat

Reply via email to