blob: 91404807f518bdd1b9e1e12238b9472f6578c842 [file]
#!/usr/bin/env bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# 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
echo "Usage: $0 ['dev' or 'release'] [semantic.version] <optional download location>"
exit 1
fi
DIST_TYPE=$1
VERSION=$2
DOWNLOAD_LOCATION="${3:-downloads}"
if [[ "${DIST_TYPE}" != "dev" && "${DIST_TYPE}" != "release" ]]; then
echo "Error: DIST_TYPE must be either 'dev' or 'release', got '${DIST_TYPE}'"
echo "Usage: $0 ['dev' or 'release'] [semantic.version] <optional download location>"
exit 1
fi
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
CWD=$(pwd)
VERSION=${VERSION#v} # in case someone prefixes a v
cleanup() {
echo "❌ Verification failed. ❌"
}
trap cleanup ERR
mkdir -p "${DOWNLOAD_LOCATION}"
echo "Downloading KEYS file ..."
curl -f -L -o "${DOWNLOAD_LOCATION}/SVN_KEYS" "https://dist.apache.org/repos/dist/release/groovy/KEYS"
echo "✅ KEYS Downloaded"
echo "Downloading Artifacts ..."
"${SCRIPT_DIR}/download-release-artifacts.sh" "${DIST_TYPE}" "${VERSION}" "${DOWNLOAD_LOCATION}"
echo "✅ Artifacts Downloaded"
echo "Verifying Source Distribution ..."
"${SCRIPT_DIR}/verify-source-distribution.sh" "${VERSION}" "${DOWNLOAD_LOCATION}"
echo "✅ Source Distribution Verified"
echo "Verifying Binary Distribution ..."
"${SCRIPT_DIR}/verify-binary-distribution.sh" "${VERSION}" "${DOWNLOAD_LOCATION}"
echo "✅ Binary Distribution Verified"
echo "Verifying Docs Distribution ..."
"${SCRIPT_DIR}/verify-docs-distribution.sh" "${VERSION}" "${DOWNLOAD_LOCATION}"
echo "✅ Docs Distribution Verified"
echo "Verifying SDK Distribution ..."
"${SCRIPT_DIR}/verify-sdk-distribution.sh" "${VERSION}" "${DOWNLOAD_LOCATION}"
echo "✅ SDK Distribution Verified"
echo "Using Java at ..."
which java
java -version
echo "Determining Gradle on PATH ..."
if GRADLE_CMD="$(command -v gradlew 2>/dev/null)"; then
: # found the wrapper on PATH
elif GRADLE_CMD="$(command -v gradle 2>/dev/null)"; then
: # fall back to system-wide Gradle
else
echo "❌ ERROR: Neither gradlew nor gradle found on \$PATH." >&2
exit 1
fi
# get rid of the path
GRADLE_CMD=$(basename "${GRADLE_CMD}")
echo "✅ Using Gradle command: ${GRADLE_CMD}"
if [ "${GRADLE_CMD}" = "gradle" ]; then
echo "Bootstrap Gradle ..."
cd "${DOWNLOAD_LOCATION}/src/groovy-${VERSION}"
"${GRADLE_CMD}" -p bootstrap
echo "✅ Gradle Bootstrapped"
else
echo "Gradle Bootstrap not needed ..."
fi
cd -
echo "Applying License Audit ..."
cd "${DOWNLOAD_LOCATION}/src/groovy-${VERSION}"
./gradlew rat
echo "✅ RAT passed"
echo "✅✅✅ Automatic verification finished."