| #!/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 iree-3.4.0rc20250430 | 
 |  | 
 | 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 |