blob: 7502eb5a730ee35c8a0481e1e0e6bd56bade8f56 [file] [log] [blame]
#!/bin/bash
#
# 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.
#
# This script will deploy a Release Candidate to pypi, includes:
# 1. Download python binary artifacts
# 2. Deploy Release Candidate to pypi
set -e
function usage() {
echo 'Usage: deploy_release_candidate_pypi.sh --release <version> --rc <rc> --user <user> [--deploy]'
}
RELEASE=
RC_NUMBER=
COMMIT=
USER_GITHUB_ID=
DEPLOY=no
BEAM_ROOT_DIR=beam
GIT_REPO_BASE_URL=apache/beam
GIT_REPO_URL=https://github.com/${GIT_REPO_BASE_URL}
while [[ $# -gt 0 ]] ; do
arg="$1"
case $arg in
--release)
shift
RELEASE=$1
shift
;;
--rc)
shift
RC_NUMBER=$1
shift
;;
--user)
shift
USER_GITHUB_ID=$1
shift
;;
--deploy)
DEPLOY=yes
shift
;;
*)
usage
exit 1
;;
esac
done
if [[ -z "$RELEASE" ]] ; then
echo 'No release version supplied.'
usage
exit 1
fi
if [[ -z "$RC_NUMBER" ]] ; then
echo 'No RC number supplied'
usage
exit 1
fi
if [[ -z "$USER_GITHUB_ID" ]] ; then
echo 'No github user supplied.'
usage
exit 1
fi
function clean_up(){
echo "Do you want to clean local clone repo ${LOCAL_CLONE_DIR}? [y|N]"
read confirmation
if [[ $confirmation = "y" ]]; then
cd ~
rm -rf ${LOCAL_CLONE_DIR}
echo "Cleaned up local repo."
fi
}
RC_TAG="v${RELEASE}-RC${RC_NUMBER}"
LOCAL_CLONE_DIR="beam_release_${RC_TAG}"
SCRIPT_DIR="${PWD}/$(dirname $0)"
echo "================Checking Environment Variables=============="
echo "will download artifacts for ${RC_TAG} built by github actions"
echo "Please review the release version and confirm: [y|N]"
read confirmation
if [[ $confirmation != "y" ]]; then
echo "Please rerun this script and make sure you have the right inputs."
exit
fi
echo "=====================Clear folder=============================="
cd ~
if [[ -d ${LOCAL_CLONE_DIR} ]]; then
echo "Deleting existing local clone repo ${LOCAL_CLONE_DIR}."
rm -rf "${LOCAL_CLONE_DIR}"
fi
mkdir "${LOCAL_CLONE_DIR}"
LOCAL_CLONE_DIR_ROOT=$(pwd)/${LOCAL_CLONE_DIR}
cd $LOCAL_CLONE_DIR
echo "===================Cloning Beam Release Branch=================="
git clone --depth 1 --branch "${RC_TAG}" ${GIT_REPO_URL} "${BEAM_ROOT_DIR}"
cd $BEAM_ROOT_DIR
RELEASE_COMMIT=$(git rev-list -n 1 $RC_TAG)
echo "================Download python artifacts======================"
PYTHON_ARTIFACTS_DIR="${LOCAL_CLONE_DIR_ROOT}/python"
python "${SCRIPT_DIR}/download_github_actions_artifacts.py" \
--github-user "${USER_GITHUB_ID}" \
--repo-url "${GIT_REPO_BASE_URL}" \
--rc-tag "${RC_TAG}" \
--release-commit "${RELEASE_COMMIT}" \
--artifacts_dir "${PYTHON_ARTIFACTS_DIR}" \
--rc_number "${RC_NUMBER}"
cd "${PYTHON_ARTIFACTS_DIR}"
echo "------Checking Hash Value for apache-beam-${RELEASE}rc${RC_NUMBER}.zip-----"
sha512sum -c "apache-beam-${RELEASE}rc${RC_NUMBER}.zip.sha512"
for artifact in *.whl; do
echo "----------Checking Hash Value for ${artifact} wheel-----------"
sha512sum -c "${artifact}.sha512"
done
echo "===================Removing sha512 files======================="
rm $(ls | grep -i ".*.sha512$")
echo "====================Upload rc to pypi========================"
virtualenv deploy_pypi_env
source ./deploy_pypi_env/bin/activate
pip install twine
mkdir dist && mv $(ls | grep apache) dist && cd dist
echo "Will upload the following files to PyPI:"
ls
echo "Are the files listed correct? [y|N]"
read confirmation
if [[ $confirmation != "y" ]]; then
echo "Exiting without deploying artifacts to PyPI."
clean_up
exit
fi
if [[ "$DEPLOY" == yes ]] ; then
twine upload *
else
echo "Skipping deployment to PyPI. Run the script with --deploy to stage the artifacts."
fi
clean_up