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