| <!-- |
| ~ 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. |
| --> |
| |
| # Verify a Release Candidate |
| |
| When a release candidate (RC) is published for a vote, community members are encouraged to verify it before casting their vote. |
| |
| ## Prerequisites |
| |
| - `curl` |
| - `gpg` |
| - `shasum` or `sha512sum` |
| - `tar` |
| - CMake 3.25+ |
| - C++23 compliant compiler (GCC 14+, Clang 18+, MSVC 2022+) |
| |
| ## Verification Steps |
| |
| We provide a script that automates the entire verification process: |
| |
| ```bash |
| dev/release/verify_rc.sh ${VERSION} ${RC} |
| ``` |
| |
| For example, to verify RC0 of version 0.3.0: |
| |
| ```bash |
| dev/release/verify_rc.sh 0.3.0 0 |
| ``` |
| |
| The script performs the following checks: |
| |
| 1. Downloads the source tarball from ASF's dev distribution |
| 2. Imports the [KEYS file](https://downloads.apache.org/iceberg/KEYS) and verifies the GPG signature |
| 3. Verifies the SHA-512 checksum |
| 4. Extracts the source and builds with CMake |
| 5. Runs the full test suite |
| |
| If everything passes, you will see: |
| |
| ``` |
| RC looks good! |
| ``` |
| |
| ## Manual Verification |
| |
| If you prefer to verify manually: |
| |
| ### 1. Download the RC |
| |
| ```bash |
| VERSION=0.3.0 |
| RC=0 |
| BASE_URL="https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-cpp-${VERSION}-rc${RC}" |
| |
| curl -O "${BASE_URL}/apache-iceberg-cpp-${VERSION}.tar.gz" |
| curl -O "${BASE_URL}/apache-iceberg-cpp-${VERSION}.tar.gz.asc" |
| curl -O "${BASE_URL}/apache-iceberg-cpp-${VERSION}.tar.gz.sha512" |
| ``` |
| |
| ### 2. Verify Signature and Checksum |
| |
| ```bash |
| # Import KEYS |
| curl https://downloads.apache.org/iceberg/KEYS | gpg --import |
| |
| # Verify GPG signature |
| gpg --verify apache-iceberg-cpp-${VERSION}.tar.gz.asc apache-iceberg-cpp-${VERSION}.tar.gz |
| |
| # Verify SHA-512 checksum |
| shasum -a 512 -c apache-iceberg-cpp-${VERSION}.tar.gz.sha512 |
| ``` |
| |
| ### 3. Build and Test |
| |
| ```bash |
| tar xf apache-iceberg-cpp-${VERSION}.tar.gz |
| cd apache-iceberg-cpp-${VERSION} |
| |
| cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DICEBERG_BUILD_STATIC=ON -DICEBERG_BUILD_SHARED=ON |
| cmake --build build |
| ctest --test-dir build --output-on-failure |
| ``` |