forked from apache/iceberg
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Python: Add Poetry build and release instructions (apache#4844)
- Loading branch information
Showing
9 changed files
with
835 additions
and
99 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,146 @@ | ||
<!-- | ||
- 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 src/iceberg/__init__.py | ||
git add src/iceberg/__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 [email protected] --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: [email protected] | ||
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 | ||
``` |
Oops, something went wrong.