blob: 1f34a123572ec3f7519d4dcedc6da9e3e20ef144 [file] [view]
<!--
~ 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
```