| <!-- | |
| ~ 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. | |
| --> | |
| # Release | |
| ## Overview | |
| 1. Test the revision to be released | |
| 2. Prepare RC and vote (detailed later) | |
| 3. Publish (detailed later) | |
| ### Prepare RC and vote | |
| Run `dev/release/release_rc.sh` on a working copy of | |
| `git@github.com:apache/iceberg-cpp` not from your fork: | |
| ```console | |
| $ git clone git@github.com:apache/iceberg-cpp.git && cd iceberg-cpp | |
| $ dev/release/release_rc.sh ${VERSION} ${RC} | |
| (Send a vote email to dev@iceberg.apache.org. | |
| You can use a draft shown by release_rc.sh for the email.) | |
| ``` | |
| Here is an example to release RC0 of version 0.1.0: | |
| ```console | |
| $ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh 0.1.0 0 | |
| ``` | |
| The arguments of `release_rc.sh` are the version and the RC number. If RC0 has a problem, we'll increment the RC number such as RC1, RC2 and so on. | |
| Requirements to run `release_rc.sh`: | |
| * You must be an Apache Iceberg committer or PMC member | |
| * You must prepare your PGP key for signing | |
| If you don't have a PGP key, https://infra.apache.org/release-signing.html#generate | |
| may be helpful. | |
| Your PGP key must be published in the KEYS file, which is hosted at: | |
| * https://downloads.apache.org/iceberg/KEYS | |
| See the header comment of them for how to add a PGP key. | |
| If you are a first-time release manager, you need to add your public key to this file. To prevent formatting errors, please use the following commands instead of editing the file manually: | |
| + Check out the release distribution directory: | |
| ```console | |
| $ svn co https://dist.apache.org/repos/dist/release/iceberg | |
| $ cd iceberg | |
| ``` | |
| + Append your GPG public key to the KEYS file. Replace <YOUR_KEY_ID> with your actual GPG key ID. | |
| ```console | |
| $ echo "" >> KEYS # append a newline | |
| $ gpg --list-sigs <YOUR_KEY_ID> >> KEYS # append signatures | |
| $ gpg --armor --export <YOUR_KEY_ID> >> KEYS # append public key block | |
| $ svn commit -m "Add GPG key for <YOUR_NAME>" | |
| ``` | |
| ### Publish | |
| We need to publish to apache.org to publish a new release. | |
| Run `dev/release/release.sh` to publish to apache.org: | |
| ```console | |
| $ GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release.sh ${VERSION} ${RC} | |
| ``` | |
| Add the release to ASF's report database via [Apache Committee Report Helper](https://reporter.apache.org/addrelease.html?iceberg) | |
| ### Verify | |
| We have a script for verifying a RC. | |
| You must install the following to run the script: | |
| * `curl` | |
| * `gpg` | |
| * `shasum` or `sha512sum` | |
| * `tar` | |
| * `cmake` (3.25 or higher) | |
| * C++23 compliant compiler (GCC 14+, Clang 18+, MSVC 2022+) | |
| To verify a RC, run the following: | |
| ```console | |
| $ dev/release/verify_rc.sh ${VERSION} ${RC} | |
| ``` | |
| If the verification is successful, the message `RC looks good!` is shown. |