|  | #!/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 an IREE release to PyPI. You will need the account password, | 
|  | # which Googlers can access at http://go/iree-pypi-password. | 
|  | # Usage: | 
|  | # ./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_exists() { | 
|  | if ! command -v "$1" > /dev/null; then | 
|  | echo "$1 not found." | 
|  | exit 1 | 
|  | fi | 
|  | } | 
|  |  | 
|  | # It really *seems* like there should be a pip command to do this, but there's | 
|  | # not, apparently. | 
|  | 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_exists "${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 openxla/iree --pattern "*.whl" | 
|  | } | 
|  |  | 
|  | # For some reason auditwheel detects these as not manylinux compliant even | 
|  | # though they are (we think). Use repair to fix the platform | 
|  | function repair_wheels() { | 
|  | echo "" | 
|  | echo "Repairing tool wheels" | 
|  | for f in iree_tools_*linux_x86_64*; do | 
|  | auditwheel repair --plat manylinux_2_17_x86_64 --wheel-dir . "$f" | 
|  | echo "Deleting non-compliant wheel '$f'" | 
|  | rm "$f" | 
|  | done | 
|  | } | 
|  |  | 
|  | function upload_wheels() { | 
|  | twine upload --verbose -u google-iree-pypi-deploy * | 
|  | } | 
|  |  | 
|  |  | 
|  | function main() { | 
|  | echo "Changing into ${TMPDIR}" | 
|  | cd "${TMPDIR}" | 
|  | check_requirements | 
|  |  | 
|  | if ! check_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 | 
|  |  | 
|  | download_wheels | 
|  | repair_wheels | 
|  | upload_wheels | 
|  | } | 
|  |  | 
|  | main |