#!/usr/bin/env bash # The script creates a separate folder in build/ and creates tags there, pushes # them and then uploads the package to PyPI. set -eu -o pipefail BASE_DIR=$(dirname $(readlink -f "$0")) cd $BASE_DIR git fetch --tags PROJECT_NAME=parso BRANCH=master BUILD_FOLDER=build [ -d $BUILD_FOLDER ] || mkdir $BUILD_FOLDER # Remove the previous deployment first. # Checkout the right branch cd $BUILD_FOLDER rm -rf $PROJECT_NAME git clone .. $PROJECT_NAME cd $PROJECT_NAME git checkout $BRANCH # Test first. pytest # Create tag tag=v$(python3 -c "import $PROJECT_NAME; print($PROJECT_NAME.__version__)") master_ref=$(git show-ref -s heads/$BRANCH) tag_ref=$(git show-ref -s $tag || true) if [[ $tag_ref ]]; then if [[ $tag_ref != $master_ref ]]; then echo 'Cannot tag something that has already been tagged with another commit.' exit 1 fi else git tag -a $tag git push --tags fi # Package and upload to PyPI #rm -rf dist/ - Not needed anymore, because the folder is never reused. echo `pwd` python3 setup.py sdist bdist_wheel # Maybe do a pip install twine before. twine upload dist/* cd $BASE_DIR # The tags have been pushed to this repo. Push the tags to github, now. git push --tags