| <!-- | |
| ~ 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 Process | |
| This guide is for Apache Iceberg committers and PMC members who are managing a release. | |
| ## Overview | |
| 1. Test the revision to be released | |
| 2. Prepare a release candidate (RC) and start a vote | |
| 3. Publish the release after the vote passes | |
| ## Prerequisites | |
| - You must be an Apache Iceberg committer or PMC member | |
| - Required tools: `git`, `gh` (GitHub CLI), `gpg`, `svn` | |
| - A PGP key for signing (see [Apache release signing guide](https://infra.apache.org/release-signing.html#generate)) | |
| ### Setting Up Your PGP Key | |
| Your PGP key must be published in the [KEYS file](https://downloads.apache.org/iceberg/KEYS). For first-time release managers: | |
| ```bash | |
| # Check out the release distribution directory | |
| svn co https://dist.apache.org/repos/dist/release/iceberg | |
| cd iceberg | |
| # Append your GPG public key | |
| echo "" >> KEYS | |
| gpg --list-sigs <YOUR_KEY_ID> >> KEYS | |
| gpg --armor --export <YOUR_KEY_ID> >> KEYS | |
| svn commit -m "Add GPG key for <YOUR_NAME>" | |
| ``` | |
| ## Step 1: Prepare RC and Vote | |
| Run `release_rc.sh` on a working copy of `apache/iceberg-cpp` (not your fork): | |
| ```bash | |
| git clone git@github.com:apache/iceberg-cpp.git && cd iceberg-cpp | |
| GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh ${VERSION} ${RC} | |
| ``` | |
| For example, to release RC0 of version 0.3.0: | |
| ```bash | |
| GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release_rc.sh 0.3.0 0 | |
| ``` | |
| The script will: | |
| 1. Tag the release candidate (e.g., `v0.3.0-rc0`) | |
| 2. Wait for the GitHub Actions RC workflow to build the source tarball | |
| 3. Download and sign the tarball | |
| 4. Upload to ASF's dev distribution | |
| 5. Print a draft vote email for `dev@iceberg.apache.org` | |
| If an RC has problems, increment the RC number (RC1, RC2, etc.) and repeat. | |
| ## Step 2: Publish | |
| After the vote passes (requires 72 hours and at least 3 binding +1 votes), publish the release: | |
| ```bash | |
| GH_TOKEN=${YOUR_GITHUB_TOKEN} dev/release/release.sh ${VERSION} ${RC} | |
| ``` | |
| The script will: | |
| 1. Create the final release tag (e.g., `v0.3.0`) | |
| 2. Move the RC artifacts from dev to release distribution | |
| 3. Create a GitHub Release with the source tarball and signatures | |
| 4. Clean up old releases from the distribution directory | |
| 5. Print a draft announcement email | |
| After running the script, add the release to [ASF's report database](https://reporter.apache.org/addrelease.html?iceberg). |