blob: d54fa0132d6d10d8c4addddfb03a279c2c253f4a [file] [log] [blame] [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.
-->
# How to release
The guide to release the Python package.
First we're going to release a release candidate (RC) and publish it to the public to test. Once the vote has passed on the RC, we can release the new version.
## Running a release candidate
Make sure that you're on the version that you want to release.
```bash
export RC=rc1
export VERSION=0.0.1${RC}
export VERSION_WITHOUT_RC=${VERSION/rc?/}
export VERSION_BRANCH=${VERSION_WITHOUT_RC//./-}
git checkout -b apache-iceberg-python-${VERSION_BRANCH}
git tag -s ${VERSION} -m "Apache Iceberg Python ${VERSION}"
export GIT_TAG=$(git show-ref ${VERSION})
export GIT_TAG_HASH=${GIT_TAG:0:40}
export LAST_COMMIT_ID=$(git rev-list ${VERSION} 2> /dev/null | head -n 1)
```
The `-s` option will sign the commit. If you don't have a key yet, you can find the instructions [here](http://www.apache.org/dev/openpgp.html#key-gen-generate-key). To install gpg on a M1 based Mac, a couple of additional steps are required: https://gist.github.com/phortuin/cf24b1cca3258720c71ad42977e1ba57
Next we'll create a source distribution (`sdist`) which will generate a `.tar.gz` with all the source files.
```bash
# Update the version
poetry version ${VERSION}
git diff pyiceberg/__init__.py
git add pyiceberg/__init__.py
git commit -s -m "Set to version ${VERSION}"
```
Now we can stage the version in pypi and upload the files to the Apache SVN.
Next we're going to build the artifacts:
```bash
rm -rf dist/
poetry build
```
This will create two artifacts:
```
Building apache-iceberg (0.1.0)
- Building sdist
- Built apache-iceberg-0.1.0.tar.gz
- Building wheel
- Built apache_iceberg-0.1.0-py3-none-any.whl
```
The `sdist` contains the source which can be used for checking licenses, and the wheel is a compiled version for quick installation.
Next, we can upload them to pypi. Please keep in mind that this **won't** bump the version for everyone that hasn't pinned their version, since it is RC [pre-release and those are ignored](https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/#pre-release-versioning).
```
twine upload dist/*
```
Before committing the files to the Apache SVN artifact distribution SVN, we need to generate hashes, and we need t o sign them using gpg:
```bash
for name in "apache_iceberg-${VERSION}-py3-none-any.whl" "apache-iceberg-${VERSION}.tar.gz"
do
gpg --yes --armor --local-user fokko@apache.org --output "dist/${name}.asc" --detach-sig "dist/${name}"
shasum -a 512 "dist/${name}" > "dist/${name}.sha512"
done
```
Next, we'll clone the Apache SVN, copy and commit the files:
```bash
export SVN_TMP_DIR=/tmp/iceberg-${VERSION_BRANCH}/
svn checkout https://dist.apache.org/repos/dist/dev/iceberg $SVN_TMP_DIR
export SVN_TMP_DIR_VERSIONED=${SVN_TMP_DIR}apache-iceberg-$VERSION/
mkdir -p $SVN_TMP_DIR_VERSIONED
cp dist/* $SVN_TMP_DIR_VERSIONED
svn add $SVN_TMP_DIR_VERSIONED
svn ci -m "Apache Iceberg ${VERSION}" ${SVN_TMP_DIR_VERSIONED}
```
Finally, we can generate the email what we'll send to the mail list:
```bash
cat << EOF > release-announcement-email.txt
To: dev@iceberg.apache.org
Subject: [VOTE] Release Apache Iceberg Python Client $VERSION
Hi Everyone,
I propose that we release the following RC as the official Apache Iceberg Python Client $VERSION release.
The commit ID is $LAST_COMMIT_ID
* This corresponds to the tag: $GIT_TAG_HASH
* https://github.com/apache/iceberg/commits/apache-iceberg-python-$VERSION_BRANCH
* https://github.com/apache/iceberg/tree/$GIT_TAG_HASH
The release tarball, signature, and checksums are here:
* https://dist.apache.org/repos/dist/dev/iceberg/apache-iceberg-python-$VERSION/
You can find the KEYS file here:
* https://dist.apache.org/repos/dist/dev/iceberg/KEYS
Convenience binary artifacts are staged on pypi:
https://pypi.org/project/apache-iceberg/$VERSION/
And can be installed using: pip install apache-iceberg==$VERSION
Please download, verify, and test.
Please vote in the next 72 hours.
[ ] +1 Release this as Apache Iceberg Python Client $VERSION
[ ] +0
[ ] -1 Do not release this because...
EOF
cat release-announcement-email.txt
```