| #!/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 | |
| # | |
| # http://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. | |
| # | |
| # Verifies a PyIceberg release candidate, following the steps in | |
| # mkdocs/docs/verify-release.md: signatures, checksums, license | |
| # documentation (RAT), and the test suite of the source distribution. | |
| set -euo pipefail | |
| if [ "$#" -ne 1 ]; then | |
| echo "Usage: $0 <version>" | |
| echo " e.g.: $0 0.6.1rc3" | |
| exit 1 | |
| fi | |
| PYICEBERG_VERSION="$1" | |
| # remove the rcX qualifier, the artifacts inside the RC are named after the release | |
| PYICEBERG_RELEASE_VERSION="${PYICEBERG_VERSION%rc*}" | |
| PYICEBERG_VERIFICATION_DIR="${PYICEBERG_VERIFICATION_DIR:-/tmp/pyiceberg/${PYICEBERG_VERSION}}" | |
| # Set to 0 to skip a step, e.g. VERIFY_TEST=0 ./dev/release/verify_rc.sh 0.6.1rc3 | |
| : "${VERIFY_SIGN:=1}" | |
| : "${VERIFY_CHECKSUM:=1}" | |
| : "${VERIFY_LICENSE:=1}" | |
| : "${VERIFY_TEST:=1}" | |
| if type shasum >/dev/null 2>&1; then | |
| sha512_verify="shasum -a 512 --check" | |
| else | |
| sha512_verify="sha512sum --check" | |
| fi | |
| import_gpg_keys() { | |
| echo "--- Importing KEYS" | |
| curl --fail --location --show-error --silent https://downloads.apache.org/iceberg/KEYS | gpg --import | |
| } | |
| download_rc() { | |
| echo "--- Downloading pyiceberg-${PYICEBERG_VERSION}" | |
| svn checkout "https://dist.apache.org/repos/dist/dev/iceberg/pyiceberg-${PYICEBERG_VERSION}/" "${PYICEBERG_VERIFICATION_DIR}" | |
| } | |
| verify_signatures() { | |
| echo "--- Verifying signatures" | |
| for name in pyiceberg-*.whl pyiceberg-*.tar.gz; do | |
| gpg --verify "${name}.asc" "${name}" | |
| done | |
| } | |
| verify_checksums() { | |
| echo "--- Verifying checksums" | |
| for name in pyiceberg-*.whl.sha512 pyiceberg-*.tar.gz.sha512; do | |
| ${sha512_verify} "${name}" | |
| done | |
| } | |
| extract_source_distribution() { | |
| echo "--- Extracting pyiceberg-${PYICEBERG_RELEASE_VERSION}.tar.gz" | |
| tar xzf "pyiceberg-${PYICEBERG_RELEASE_VERSION}.tar.gz" | |
| } | |
| verify_license_documentation() { | |
| echo "--- Running RAT checks" | |
| ./dev/check-license | |
| } | |
| test_source_distribution() { | |
| echo "--- Installing and running the tests, this spins up Docker containers" | |
| make install | |
| make test-coverage | |
| } | |
| echo "Verifying pyiceberg-${PYICEBERG_VERSION} in ${PYICEBERG_VERIFICATION_DIR}" | |
| if [ "${VERIFY_SIGN}" -gt 0 ]; then | |
| import_gpg_keys | |
| fi | |
| download_rc | |
| cd "${PYICEBERG_VERIFICATION_DIR}" | |
| if [ "${VERIFY_SIGN}" -gt 0 ]; then | |
| verify_signatures | |
| fi | |
| if [ "${VERIFY_CHECKSUM}" -gt 0 ]; then | |
| verify_checksums | |
| fi | |
| extract_source_distribution | |
| cd "pyiceberg-${PYICEBERG_RELEASE_VERSION}" | |
| if [ "${VERIFY_LICENSE}" -gt 0 ]; then | |
| verify_license_documentation | |
| fi | |
| if [ "${VERIFY_TEST}" -gt 0 ]; then | |
| test_source_distribution | |
| fi | |
| echo "RC looks good! Cast your vote on the dev mailing list." |