Skip to content
90 changes: 56 additions & 34 deletions website/src/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ In the context of our release, we use several terms to describe different stages
Here's an explanation of these terms:

- `iceberg_version`: the version of Iceberg to be released, like `0.2.0`.
- `release_version`: the version of release candidate, like `0.2.0-rc.1`.
- `rc_version`: the minor version for voting round, like `rc.1`.
- `release_version`: the version of release candidate, like `0.2.0-rc.1`.

## Preparation

Expand Down Expand Up @@ -117,14 +117,16 @@ Please note that this version is the exact version of the release, not the relea

Download and setup `cargo-deny`. You can refer to [cargo-deny](https://embarkstudios.github.io/cargo-deny/cli/index.html).

Running `python3 ./scripts/dependencies.py generate` to update the dependencies list of every package.
Run `python3 ./scripts/dependencies.py generate` to update the dependencies list of every package.

Run `python3 ./scripts/dependencies.py check` to verify the updated dependencies' license.

### Push release candidate tag

After bump version PR gets merged, we can create a GitHub release for the release candidate:

- Create a tag at `main` branch on the `Bump Version` / `Patch up version` commit: `git tag -s "v0.2.0-rc.1"`, please correctly check out the corresponding commit instead of directly tagging on the main branch.
- Push tags to GitHub: `git push --tags`.
- Create a tag at `main` branch on the `Bump Version` / `Patch up version` commit: `git tag -s "v${release_version}"`, please correctly check out the corresponding commit instead of directly tagging on the main branch.
- Push tags to GitHub: `git push origin "v${release_version}"`.

## ASF Side

Expand All @@ -145,7 +147,6 @@ After GitHub Release has been created, we can start to create ASF Release.
- `apache-iceberg-rust-${release_version}-src.tar.gz.asc`
- `apache-iceberg-rust-${release_version}-src.tar.gz.sha512`
- Check the header of the source code. This step needs docker to run.
- Push the newly created branch to GitHub

This script will create a new release under `dist`.

Expand All @@ -163,7 +164,7 @@ dist

SVN is required for this step.

The svn repository of the dev branch is: <https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust>
The svn repository of the dev branch is: <https://dist.apache.org/repos/dist/dev/iceberg/>

First, checkout Iceberg to local directory:

Expand All @@ -178,22 +179,25 @@ Then, upload the artifacts:

```shell
# create a directory named by version
mkdir /tmp/iceberg-dist-dev/${release_version}
mkdir /tmp/iceberg-dist-dev/apache-iceberg-rust-${release_version}/

# copy source code and signature package to the versioned directory
cp ${repo_dir}/dist/* /tmp/iceberg-dist-dev/iceberg-rust-${release_version}/
cp ./dist/* /tmp/iceberg-dist-dev/apache-iceberg-rust-${release_version}/

# change dir to the svn folder
cd /tmp/iceberg-dist-dev/

# check svn status
svn status

# add to svn
svn add ${release_version}
# check svn status
svn status
svn add apache-iceberg-rust-${release_version}

# commit to SVN remote server
svn commit -m "Prepare for ${release_version}"
svn commit -m "Prepare for iceberg-rust ${release_version}"
```

Visit <https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust/> to make sure the artifacts are uploaded correctly.
Visit <https://dist.apache.org/repos/dist/dev/iceberg/> to make sure the artifacts are uploaded correctly.

### Rescue

Expand All @@ -209,7 +213,7 @@ Iceberg Community Vote should send email to: <dev@iceberg.apache.org>:
Title:

```
[VOTE] Release Apache Iceberg Rust ${release_version} RC1
[VOTE] Release Apache Iceberg Rust ${iceberg_version} ${rc_version}
```

Content:
Expand All @@ -219,19 +223,19 @@ Hello, Apache Iceberg Rust Community,

This is a call for a vote to release Apache Iceberg rust version ${iceberg_version}.

The tag to be voted on is ${iceberg_version}.
The tag to be voted on is v${release_version}.

The release candidate:

https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust-${release_version}/
https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-rust-${release_version}/

Keys to verify the release candidate:

https://downloads.apache.org/iceberg/KEYS

Git tag for the release:

https://github.com/apache/iceberg-rust/releases/tag/v${iceberg_version}
https://github.com/apache/iceberg-rust/releases/tag/v${release_version}

Please download, verify, and test.

Expand Down Expand Up @@ -267,7 +271,7 @@ After at least 3 `+1` binding vote (from Iceberg PMC member), claim the vote res
Title:

```
[RESULT][VOTE] Release Apache Iceberg Rust ${release_version} RC1
[RESULT][VOTE] Release Apache Iceberg Rust ${iceberg_version} ${rc_version}
```

Content:
Expand Down Expand Up @@ -312,37 +316,53 @@ After downloading them, here are the instructions on how to verify them.

* Import keys:

```bash
curl https://downloads.apache.org/iceberg/KEYS -o KEYS
gpg --import KEYS
```
* Verify the `.asc` file: ```gpg --verify apache-iceberg-rust-${iceberg_version}.tar.gz.asc```
* Verify the checksums: ```shasum -a 512 -c apache-iceberg-rust-${iceberg_version}.tar.gz.sha512```
* Verify license headers: ```docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header check```
```bash
curl https://downloads.apache.org/iceberg/KEYS -o KEYS
gpg --import KEYS
```
* Verify the `.asc` file:

```bash
gpg --verify apache-iceberg-rust-*.tar.gz.asc
```
Expects: `"apache-iceberg-rust-0.7.0-src.tar.gz: OK"`
* Verify the checksums:

```bash
shasum -a 512 -c apache-iceberg-rust-*.tar.gz.sha512
```
Expects: `gpg: Good signature from ...`
* Verify build and test:
```bash
tar -xzf apache-iceberg-rust-${iceberg_version}.tar.gz
cd apache-iceberg-rust-${iceberg_version}
make build && make test
```

```bash
tar -xzf apache-iceberg-rust-*.tar.gz
cd apache-iceberg-rust-*/
make build && make test
```
* Verify license headers:

```bash
docker run -it --rm -v $(pwd):/github/workspace apache/skywalking-eyes header check
```
Expects: `INFO Totally checked _ files, valid: _, invalid: 0, ignored: _, fixed: 0 `

## Official Release

### Push the release git tag

```shell
# Checkout the tags that passed VOTE
git checkout ${release_version}
git checkout "v${release_version}"
# Tag with the iceberg version
git tag -s ${iceberg_version}
git tag -s "v${iceberg_version}"
# Push tags to github to trigger releases
git push origin ${iceberg_version}
git push origin "v${iceberg_version}"
```

### Publish artifacts to SVN RELEASE branch

```shell
svn mv https://dist.apache.org/repos/dist/dev/iceberg/iceberg-rust-${release_version} https://dist.apache.org/repos/dist/release/iceberg/iceberg-rust-${iceberg_version} -m "Release Apache Iceberg Rust ${iceberg_version}"
svn mv https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-rust-${release_version} https://dist.apache.org/repos/dist/release/iceberg/apache-iceberg-rust-${iceberg_version} -m "Release Apache Iceberg Rust ${iceberg_version}"
```

### Change Iceberg Rust Website download link
Expand Down Expand Up @@ -393,6 +413,8 @@ Apache Iceberg Rust website: https://rust.iceberg.apache.org/

Download Links: https://rust.iceberg.apache.org/download

From official ASF distribution: https://dist.apache.org/repos/dist/release/iceberg/apache-iceberg-rust-${release_version}/

Iceberg Resources:
- Issue: https://github.com/apache/iceberg-rust/issues
- Mailing list: dev@iceberg.apache.org
Expand Down
Loading