@@ -124,55 +124,84 @@ r2_promote() {
124124 tmp_dir=$( mktemp -d)
125125 trap " rm -rf ${tmp_dir} " RETURN
126126
127- # Download matching files from S3 (using current OIDC credentials)
128- echo " + Downloading matching files from S3..."
129- (
130- set -x
131- ${AWS} s3 cp \
132- --recursive \
133- --exclude ' *' \
134- --include " *${package_name} -${pytorch_version}${PACKAGE_INCLUDE_SUFFIX:-* } " \
135- " ${PYTORCH_S3_FROM/ \/ $// } " \
136- " ${tmp_dir} /"
137- )
138-
139- # Switch to R2 credentials
140- export AWS_ACCESS_KEY_ID=" ${R2_ACCESS_KEY_ID} "
141- export AWS_SECRET_ACCESS_KEY=" ${R2_SECRET_ACCESS_KEY} "
142- unset AWS_SESSION_TOKEN
143- export AWS_DEFAULT_REGION=" auto"
127+ # List matching files from S3 first (using current OIDC credentials)
128+ echo " + Listing matching files from S3..."
129+ local s3_from_path=" ${PYTORCH_S3_FROM/ \/ $// } "
130+ local file_list=" ${tmp_dir} /file_list.txt"
131+ ${AWS} s3 ls " ${s3_from_path} /" --recursive \
132+ | grep " ${package_name} -${pytorch_version}${PACKAGE_INCLUDE_SUFFIX:- } " \
133+ | awk ' {print $NF}' > " ${file_list} " || true
134+
135+ local total_files
136+ total_files=$( wc -l < " ${file_list} " )
137+ echo " + Found ${total_files} files to promote to R2"
138+
139+ if [[ ${total_files} -eq 0 ]]; then
140+ echo " + No matching files found, skipping R2 promotion"
141+ return 0
142+ fi
144143
145- # Upload each file to R2 with sha256 metadata
146- echo " + Uploading files to R2..."
147- local file_count=0
148- for pkg in " ${tmp_dir} " /* ; do
149- if [[ ! -f " ${pkg} " ]]; then
150- continue
144+ # Helper to restore S3 credentials
145+ _restore_s3_creds () {
146+ export AWS_ACCESS_KEY_ID=" ${saved_aws_access_key_id} "
147+ export AWS_SECRET_ACCESS_KEY=" ${saved_aws_secret_access_key} "
148+ if [[ -n " ${saved_aws_session_token} " ]]; then
149+ export AWS_SESSION_TOKEN=" ${saved_aws_session_token} "
150+ else
151+ unset AWS_SESSION_TOKEN 2> /dev/null || true
151152 fi
153+ if [[ -n " ${saved_aws_default_region} " ]]; then
154+ export AWS_DEFAULT_REGION=" ${saved_aws_default_region} "
155+ else
156+ unset AWS_DEFAULT_REGION 2> /dev/null || true
157+ fi
158+ }
159+
160+ # Helper to switch to R2 credentials
161+ _set_r2_creds () {
162+ export AWS_ACCESS_KEY_ID=" ${R2_ACCESS_KEY_ID} "
163+ export AWS_SECRET_ACCESS_KEY=" ${R2_SECRET_ACCESS_KEY} "
164+ unset AWS_SESSION_TOKEN 2> /dev/null || true
165+ export AWS_DEFAULT_REGION=" auto"
166+ }
167+
168+ # Download and upload files one at a time to avoid running out of disk space
169+ echo " + Downloading and uploading files to R2 one by one..."
170+ local file_count=0
171+ while IFS= read -r s3_key; do
152172 local filename
153- filename=$( basename " ${pkg} " )
173+ filename=$( basename " ${s3_key} " )
174+ local local_file=" ${tmp_dir} /${filename} "
175+
176+ # Download single file from S3 (using S3 credentials)
177+ _restore_s3_creds
178+ (
179+ set -x
180+ ${AWS} s3 cp " ${PYTORCH_S3_BUCKET} /${s3_key} " " ${local_file} "
181+ )
182+
183+ # Compute sha256 checksum
154184 local sha256
155- sha256=$( sha256sum " ${pkg} " | awk ' {print $1}' )
185+ sha256=$( sha256sum " ${local_file} " | awk ' {print $1}' )
186+
187+ # Upload to R2
188+ _set_r2_creds
156189 (
157190 set -x
158- ${AWS} s3 cp " ${pkg } " " ${r2_dest/ \/ $// } /${filename} " \
191+ ${AWS} s3 cp " ${local_file } " " ${r2_dest/ \/ $// } /${filename} " \
159192 --metadata " checksum-sha256=${sha256} " \
160193 --endpoint-url " ${R2_ENDPOINT_URL} "
161194 )
195+
196+ # Remove local file to free disk space
197+ rm -f " ${local_file} "
198+
162199 file_count=$(( file_count + 1 ))
163- done
200+ echo " + Progress: ${file_count} /${total_files} files uploaded"
201+ done < " ${file_list} "
164202
165203 echo " + Uploaded ${file_count} files to R2"
166204
167205 # Restore original AWS credentials
168- export AWS_ACCESS_KEY_ID=" ${saved_aws_access_key_id} "
169- export AWS_SECRET_ACCESS_KEY=" ${saved_aws_secret_access_key} "
170- if [[ -n " ${saved_aws_session_token} " ]]; then
171- export AWS_SESSION_TOKEN=" ${saved_aws_session_token} "
172- fi
173- if [[ -n " ${saved_aws_default_region} " ]]; then
174- export AWS_DEFAULT_REGION=" ${saved_aws_default_region} "
175- else
176- unset AWS_DEFAULT_REGION
177- fi
206+ _restore_s3_creds
178207}
0 commit comments