xref: /aosp_15_r20/external/pytorch/.circleci/scripts/binary_upload.sh (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
1*da0073e9SAndroid Build Coastguard Worker#!/usr/bin/env bash
2*da0073e9SAndroid Build Coastguard Worker
3*da0073e9SAndroid Build Coastguard Workerset -euo pipefail
4*da0073e9SAndroid Build Coastguard Worker
5*da0073e9SAndroid Build Coastguard WorkerPACKAGE_TYPE=${PACKAGE_TYPE:-conda}
6*da0073e9SAndroid Build Coastguard Worker
7*da0073e9SAndroid Build Coastguard WorkerPKG_DIR=${PKG_DIR:-/tmp/workspace/final_pkgs}
8*da0073e9SAndroid Build Coastguard Worker
9*da0073e9SAndroid Build Coastguard Worker# Designates whether to submit as a release candidate or a nightly build
10*da0073e9SAndroid Build Coastguard Worker# Value should be `test` when uploading release candidates
11*da0073e9SAndroid Build Coastguard Worker# currently set within `designate_upload_channel`
12*da0073e9SAndroid Build Coastguard WorkerUPLOAD_CHANNEL=${UPLOAD_CHANNEL:-nightly}
13*da0073e9SAndroid Build Coastguard Worker# Designates what subfolder to put packages into
14*da0073e9SAndroid Build Coastguard WorkerUPLOAD_SUBFOLDER=${UPLOAD_SUBFOLDER:-}
15*da0073e9SAndroid Build Coastguard WorkerUPLOAD_BUCKET="s3://pytorch"
16*da0073e9SAndroid Build Coastguard WorkerBACKUP_BUCKET="s3://pytorch-backup"
17*da0073e9SAndroid Build Coastguard WorkerBUILD_NAME=${BUILD_NAME:-}
18*da0073e9SAndroid Build Coastguard Worker
19*da0073e9SAndroid Build Coastguard WorkerDRY_RUN=${DRY_RUN:-enabled}
20*da0073e9SAndroid Build Coastguard Worker# Don't actually do work unless explicit
21*da0073e9SAndroid Build Coastguard WorkerANACONDA="true anaconda"
22*da0073e9SAndroid Build Coastguard WorkerAWS_S3_CP="aws s3 cp --dryrun"
23*da0073e9SAndroid Build Coastguard Workerif [[ "${DRY_RUN}" = "disabled" ]]; then
24*da0073e9SAndroid Build Coastguard Worker  ANACONDA="anaconda"
25*da0073e9SAndroid Build Coastguard Worker  AWS_S3_CP="aws s3 cp"
26*da0073e9SAndroid Build Coastguard Workerfi
27*da0073e9SAndroid Build Coastguard Worker
28*da0073e9SAndroid Build Coastguard Workerif [[ "${USE_SPLIT_BUILD:-false}" == "true" ]]; then
29*da0073e9SAndroid Build Coastguard Worker  UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_pypi_pkg"
30*da0073e9SAndroid Build Coastguard Workerfi
31*da0073e9SAndroid Build Coastguard Worker
32*da0073e9SAndroid Build Coastguard Worker# this is special build with all dependencies packaged
33*da0073e9SAndroid Build Coastguard Workerif [[ ${BUILD_NAME} == *-full* ]]; then
34*da0073e9SAndroid Build Coastguard Worker  UPLOAD_SUBFOLDER="${UPLOAD_SUBFOLDER}_full"
35*da0073e9SAndroid Build Coastguard Workerfi
36*da0073e9SAndroid Build Coastguard Worker
37*da0073e9SAndroid Build Coastguard Worker# Sleep 2 minutes between retries for conda upload
38*da0073e9SAndroid Build Coastguard Workerretry () {
39*da0073e9SAndroid Build Coastguard Worker  "$@"  || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@") || (sleep 5m && "$@")
40*da0073e9SAndroid Build Coastguard Worker}
41*da0073e9SAndroid Build Coastguard Worker
42*da0073e9SAndroid Build Coastguard Workerdo_backup() {
43*da0073e9SAndroid Build Coastguard Worker  local backup_dir
44*da0073e9SAndroid Build Coastguard Worker  backup_dir=$1
45*da0073e9SAndroid Build Coastguard Worker  (
46*da0073e9SAndroid Build Coastguard Worker    pushd /tmp/workspace
47*da0073e9SAndroid Build Coastguard Worker    set -x
48*da0073e9SAndroid Build Coastguard Worker    ${AWS_S3_CP} --recursive . "${BACKUP_BUCKET}/${CIRCLE_TAG}/${backup_dir}/"
49*da0073e9SAndroid Build Coastguard Worker  )
50*da0073e9SAndroid Build Coastguard Worker}
51*da0073e9SAndroid Build Coastguard Worker
52*da0073e9SAndroid Build Coastguard Workerconda_upload() {
53*da0073e9SAndroid Build Coastguard Worker  (
54*da0073e9SAndroid Build Coastguard Worker    set -x
55*da0073e9SAndroid Build Coastguard Worker    retry \
56*da0073e9SAndroid Build Coastguard Worker    ${ANACONDA} \
57*da0073e9SAndroid Build Coastguard Worker    upload  \
58*da0073e9SAndroid Build Coastguard Worker    ${PKG_DIR}/*.tar.bz2 \
59*da0073e9SAndroid Build Coastguard Worker    -u "pytorch-${UPLOAD_CHANNEL}" \
60*da0073e9SAndroid Build Coastguard Worker    --label main \
61*da0073e9SAndroid Build Coastguard Worker    --no-progress \
62*da0073e9SAndroid Build Coastguard Worker    --force
63*da0073e9SAndroid Build Coastguard Worker  )
64*da0073e9SAndroid Build Coastguard Worker}
65*da0073e9SAndroid Build Coastguard Worker
66*da0073e9SAndroid Build Coastguard Workers3_upload() {
67*da0073e9SAndroid Build Coastguard Worker  local extension
68*da0073e9SAndroid Build Coastguard Worker  local pkg_type
69*da0073e9SAndroid Build Coastguard Worker  extension="$1"
70*da0073e9SAndroid Build Coastguard Worker  pkg_type="$2"
71*da0073e9SAndroid Build Coastguard Worker  s3_root_dir="${UPLOAD_BUCKET}/${pkg_type}/${UPLOAD_CHANNEL}"
72*da0073e9SAndroid Build Coastguard Worker  if [[ -z ${UPLOAD_SUBFOLDER:-} ]]; then
73*da0073e9SAndroid Build Coastguard Worker    s3_upload_dir="${s3_root_dir}/"
74*da0073e9SAndroid Build Coastguard Worker  else
75*da0073e9SAndroid Build Coastguard Worker    s3_upload_dir="${s3_root_dir}/${UPLOAD_SUBFOLDER}/"
76*da0073e9SAndroid Build Coastguard Worker  fi
77*da0073e9SAndroid Build Coastguard Worker  (
78*da0073e9SAndroid Build Coastguard Worker    for pkg in ${PKG_DIR}/*.${extension}; do
79*da0073e9SAndroid Build Coastguard Worker      (
80*da0073e9SAndroid Build Coastguard Worker        set -x
81*da0073e9SAndroid Build Coastguard Worker        ${AWS_S3_CP} --no-progress --acl public-read "${pkg}" "${s3_upload_dir}"
82*da0073e9SAndroid Build Coastguard Worker      )
83*da0073e9SAndroid Build Coastguard Worker    done
84*da0073e9SAndroid Build Coastguard Worker  )
85*da0073e9SAndroid Build Coastguard Worker}
86*da0073e9SAndroid Build Coastguard Worker
87*da0073e9SAndroid Build Coastguard Worker# Install dependencies (should be a no-op if previously installed)
88*da0073e9SAndroid Build Coastguard Workerconda install -yq anaconda-client
89*da0073e9SAndroid Build Coastguard Workerpip install -q awscli
90*da0073e9SAndroid Build Coastguard Worker
91*da0073e9SAndroid Build Coastguard Workercase "${PACKAGE_TYPE}" in
92*da0073e9SAndroid Build Coastguard Worker  conda)
93*da0073e9SAndroid Build Coastguard Worker    conda_upload
94*da0073e9SAndroid Build Coastguard Worker    for conda_archive in ${PKG_DIR}/*.tar.bz2; do
95*da0073e9SAndroid Build Coastguard Worker      # Fetch  platform (eg. win-64, linux-64, etc.) from index file because
96*da0073e9SAndroid Build Coastguard Worker      # there's no actual conda command to read this
97*da0073e9SAndroid Build Coastguard Worker      subdir=$(\
98*da0073e9SAndroid Build Coastguard Worker        tar -xOf "${conda_archive}" info/index.json \
99*da0073e9SAndroid Build Coastguard Worker          | grep subdir  \
100*da0073e9SAndroid Build Coastguard Worker          | cut -d ':' -f2 \
101*da0073e9SAndroid Build Coastguard Worker          | sed -e 's/[[:space:]]//' -e 's/"//g' -e 's/,//' \
102*da0073e9SAndroid Build Coastguard Worker      )
103*da0073e9SAndroid Build Coastguard Worker      BACKUP_DIR="conda/${subdir}"
104*da0073e9SAndroid Build Coastguard Worker    done
105*da0073e9SAndroid Build Coastguard Worker    ;;
106*da0073e9SAndroid Build Coastguard Worker  libtorch)
107*da0073e9SAndroid Build Coastguard Worker    s3_upload "zip" "libtorch"
108*da0073e9SAndroid Build Coastguard Worker    BACKUP_DIR="libtorch/${UPLOAD_CHANNEL}/${UPLOAD_SUBFOLDER}"
109*da0073e9SAndroid Build Coastguard Worker    ;;
110*da0073e9SAndroid Build Coastguard Worker  # wheel can either refer to wheel/manywheel
111*da0073e9SAndroid Build Coastguard Worker  *wheel)
112*da0073e9SAndroid Build Coastguard Worker    s3_upload "whl" "whl"
113*da0073e9SAndroid Build Coastguard Worker    BACKUP_DIR="whl/${UPLOAD_CHANNEL}/${UPLOAD_SUBFOLDER}"
114*da0073e9SAndroid Build Coastguard Worker    ;;
115*da0073e9SAndroid Build Coastguard Worker  *)
116*da0073e9SAndroid Build Coastguard Worker    echo "ERROR: unknown package type: ${PACKAGE_TYPE}"
117*da0073e9SAndroid Build Coastguard Worker    exit 1
118*da0073e9SAndroid Build Coastguard Worker    ;;
119*da0073e9SAndroid Build Coastguard Workeresac
120*da0073e9SAndroid Build Coastguard Worker
121*da0073e9SAndroid Build Coastguard Worker# CIRCLE_TAG is defined by upstream circleci,
122*da0073e9SAndroid Build Coastguard Worker# this can be changed to recognize tagged versions
123*da0073e9SAndroid Build Coastguard Workerif [[ -n "${CIRCLE_TAG:-}" ]]; then
124*da0073e9SAndroid Build Coastguard Worker  do_backup "${BACKUP_DIR}"
125*da0073e9SAndroid Build Coastguard Workerfi
126