| #!/bin/bash |
| # Copyright 2020 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # Convert local wheels to cipd packages for upload. |
| # |
| # This is mostly a mitigation until Chrome infra's dockerbuild supports building |
| # Python 3-only wheels. |
| |
| set -eu |
| |
| # Switch to the pip_packages/ dir. |
| readonly bin_dir="$(readlink -e -- "$(dirname -- "$0")")" |
| readonly pip_dir="${bin_dir}/../pip_packages" |
| cd "${pip_dir}" |
| |
| # Walk each wheel that we have in the tree. |
| for whl in *.whl; do |
| # If we already created a package, skip it. Makes incremental runs nicer. |
| if [[ -e "${whl}.pkg" ]]; then |
| continue |
| fi |
| |
| # In case we need to rename the wheel in the cipd package. |
| newwhl="${whl}" |
| |
| # The name of the cipd package itself. This is the server-side name: |
| # https://chrome-infra-packages.appspot.com/p/chromiumos/infra/virtualenv/$pkg/ |
| pkg="${whl%%-*}" |
| |
| # Figure out what versions of Python this wheel is compatible with, and |
| # name the package & bundled wheel accordingly. This follows the current |
| # chops conventions: |
| # - For source-only packages, use the right -py2/-py3/-py2_py3 suffix. |
| # - For binary wheels, use the vpython ABI tag in the pkg name, and then |
| # rename the bundled wheel so it's compatible with all vpython versions. |
| # |
| # This latter part is a bit funky, but it's how vpython3 currently processes |
| # cipd wheels: It uses the vpython ABI to select the cipd package on the |
| # server, and then assumes whatever wheel is inside is compatible. That's |
| # why we rename it to "none-any" -- to bypass python/pip's own ABI search. |
| # This is how chops' dockerbuild logic also works currently. |
| case ${whl} in |
| *-py2.py3-none-any*) |
| pkg+="-py2_py3" |
| ;; |
| *-py2-none-any*) |
| pkg+="-py2" |
| ;; |
| *-py3-none-any*) |
| pkg+="-py3" |
| ;; |
| *-cp38-cp38-manylinux*_x86_64*) |
| pkg+="/linux-amd64_cp32_abi3" |
| newwhl="${whl/-cp38-cp38-manylinux*_x86_64/-py3-none-any}" |
| ;; |
| *) |
| echo "Skipping ${whl}" |
| continue |
| ;; |
| esac |
| |
| echo "making ${whl}.pkg" |
| |
| # Create a temp dir using the layout that cipd/vpython expects for wheels: |
| # ./ |
| # |- .cipdpkg/ |
| # | `- manifest.json |
| # `- <the python wheel> |
| # Then we'll zip it up and get our cipd package! |
| rm -rf tmp |
| mkdir -p tmp/.cipdpkg |
| pushd tmp >/dev/null |
| ln "../${whl}" "${newwhl}" |
| cat <<EOF >.cipdpkg/manifest.json |
| { |
| "format_version": "1.1", |
| "package_name": "chromiumos/infra/virtualenv/${pkg}", |
| "install_mode": "symlink" |
| } |
| EOF |
| zip -q "../${whl}.pkg" "${newwhl}" .cipdpkg/manifest.json |
| popd >/dev/null |
| done |
| |
| rm -rf tmp |
| |
| echo "To upload:" |
| echo " cipd pkg-register <pkg file>" |