From 0f4c5b3b8a1e5e02a16ce0dca4fb81a989dc6135 Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Thu, 13 Mar 2025 15:05:26 -0700 Subject: [PATCH] releng: workaround awscli breaking garage by changing checksum algo We use https://garagehq.deuxfleurs.fr for https://docs.lix.systems, https://releases.lix.systems, https://cache.lix.systems. It's generally great, but AWS doesn't, erm, care, about other implementations and broke their client library. We already ran into https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/824, which was mitigated by a garage upgrade to create a new error. These bugs were what got us: - https://github.com/boto/boto3/issues/4392 - https://github.com/aws/aws-cli/issues/9214 Error: upload failed: release/manual/.nojekyll to s3://docs/manual/lix/nightly/.nojekyll An error occurred (InvalidRequest) when calling the PutObject operation: Bad request: invalid checksum algorithm The missing checksum algorithm is CRC32NVME, with a bug filed here: https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/963 Change-Id: Ib78a89034bf0f2a6773fc505a347b2aadb775e93 --- releng/create_release.xsh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/releng/create_release.xsh b/releng/create_release.xsh index 8caa0b110..34c29e337 100644 --- a/releng/create_release.xsh +++ b/releng/create_release.xsh @@ -32,6 +32,9 @@ RELENG_MSG = "Release created with releng/create_release.xsh" BUILD_CORES = 16 MAX_JOBS = 2 +# Workaround for bug in garage: https://git.deuxfleurs.fr/Deuxfleurs/garage/issues/963 +S3_ARGS = ['--checksum-algorithm=SHA256'] + def setup_creds(env: RelengEnvironment): key = keys.get_ephemeral_key(env) @@ -237,7 +240,7 @@ def upload_artifacts(env: RelengEnvironment, noconfirm=False, no_check_git=False docker.upload_docker_images(target, docker_images) print('[+] Upload to release bucket') - aws s3 cp --recursive @(ARTIFACTS)/ @(env.releases_bucket)/ + aws s3 cp @(S3_ARGS) --recursive @(ARTIFACTS)/ @(env.releases_bucket)/ print('[+] Upload manual') upload_manual(env) @@ -284,9 +287,9 @@ def upload_manual(env: RelengEnvironment): version = 'nightly' print('[+] aws s3 sync manual') - aws s3 sync --delete @(MANUAL)/ @(env.docs_bucket)/manual/lix/@(version)/ + aws s3 sync @(S3_ARGS) --delete @(MANUAL)/ @(env.docs_bucket)/manual/lix/@(version)/ if OFFICIAL_RELEASE: - aws s3 sync --delete @(MANUAL)/ @(env.docs_bucket)/manual/lix/stable/ + aws s3 sync @(S3_ARGS) --delete @(MANUAL)/ @(env.docs_bucket)/manual/lix/stable/ def build_artifacts(build_profile, no_check_git=False):