blob: 908559331c7aa87536dd4d53701d62005c54b15e [file] [log] [blame]
#!/bin/bash
# Copyright 2022 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
# For deploying to PyPI, you will need to have credentials set up.
# Googlers can access the shared releasing account "google-iree-pypi-deploy"
# at http://go/iree-pypi-password
#
# Typical usage is to use keyring or create a ~/.pypirc file with:
#
# [pypi]
# username = __token__
# password = <<API TOKEN>>
#
# You must have `gh` installed and authenticated (run `gh auth`).
#
# Usage:
# python -m venv .venv
# source .venv/bin/activate
# python -m pip install -r ./pypi_deploy_requirements.txt
# ./pypi_deploy.sh candidate-20220930.282
set -euo pipefail
RELEASE="$1"
SCRIPT_DIR="$(dirname -- "$( readlink -f -- "$0"; )")";
REQUIREMENTS_FILE="${SCRIPT_DIR}/pypi_deploy_requirements.txt"
TMPDIR="$(mktemp --directory --tmpdir iree_pypi_wheels.XXXXX)"
function check_command_exists() {
if ! command -v "$1" > /dev/null; then
echo "$1 not found."
return 1
fi
return 0
}
function check_python_package_installed() {
if ! pip show "$1" > /dev/null; then
echo "$1 not installed."
return 1
fi
return 0
}
function check_requirements() {
while read line; do
# Read in the package, ignoring everything after the first '='
ret=0
read -rd '=' package <<< "${line}" || ret=$?
# exit code 1 means EOF (i.e. no '='), which is fine.
if (( ret!=0 && ret!=1 )); then
echo "Reading requirements file '${REQUIREMENTS_FILE}' failed."
exit "${ret}"
fi
if ! check_python_package_installed "${package}"; then
echo "Recommend installing python dependencies in a venv using pypi_deploy_requirements.txt"
exit 1
fi
done < <(cat "${REQUIREMENTS_FILE}")
}
function download_wheels() {
echo ""
echo "Downloading wheels from '${RELEASE}'..."
gh release download "${RELEASE}" --repo iree-org/iree --pattern "*.whl"
echo ""
echo "Downloaded wheels:"
ls
}
function edit_release_versions() {
echo ""
echo "Editing release versions..."
for file in *
do
${SCRIPT_DIR}/promote_whl_from_rc_to_final.py ${file} --delete-old-wheel
done
echo "Edited wheels:"
ls
}
function upload_wheels() {
echo ""
echo "Uploading wheels..."
twine upload --verbose *
}
function main() {
echo "Changing into ${TMPDIR}"
cd "${TMPDIR}"
set +e
check_requirements
if ! check_command_exists gh; then
echo "The GitHub CLI 'gh' is required. See https://github.com/cli/cli#installation."
echo " Googlers, the PPA should already be on your linux machine."
exit 1
fi
set -e
download_wheels
edit_release_versions
upload_wheels
}
main