diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index abc9813..72bc3b3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -732,6 +732,8 @@ jobs: AWS_DEFAULT_REGION: ${{ vars.S3_REGION }} AWS_REGION: ${{ vars.S3_REGION }} AWS_EC2_METADATA_DISABLED: "true" + AWS_REQUEST_CHECKSUM_CALCULATION: "WHEN_REQUIRED" + AWS_RESPONSE_CHECKSUM_VALIDATION: "WHEN_REQUIRED" steps: - uses: actions/checkout@v4 @@ -806,6 +808,7 @@ jobs: shell: bash run: | set -euo pipefail + aws --version aws --endpoint-url "$S3_ENDPOINT" --region "$S3_REGION" s3 ls "s3://$S3_BUCKET" >/dev/null echo "S3 access probe succeeded for $S3_BUCKET" diff --git a/scripts/Publish-Plonds.ps1 b/scripts/Publish-Plonds.ps1 index 659c449..518a520 100644 --- a/scripts/Publish-Plonds.ps1 +++ b/scripts/Publish-Plonds.ps1 @@ -80,11 +80,36 @@ function Invoke-AwsSyncIfPossible { return } - if ($IgnoreFailure) { - & aws @Arguments 2>$null + $previousRequestChecksumCalculation = $env:AWS_REQUEST_CHECKSUM_CALCULATION + $previousResponseChecksumValidation = $env:AWS_RESPONSE_CHECKSUM_VALIDATION + + # Rainyun's S3-compatible endpoint rejects AWS CLI v2's default checksum headers + # during multipart uploads. Restrict checksum behavior to API-required cases only. + $env:AWS_REQUEST_CHECKSUM_CALCULATION = "WHEN_REQUIRED" + $env:AWS_RESPONSE_CHECKSUM_VALIDATION = "WHEN_REQUIRED" + + try { + if ($IgnoreFailure) { + & aws @Arguments 2>$null + } + else { + & aws @Arguments + } } - else { - & aws @Arguments + finally { + if ($null -eq $previousRequestChecksumCalculation) { + Remove-Item Env:AWS_REQUEST_CHECKSUM_CALCULATION -ErrorAction SilentlyContinue + } + else { + $env:AWS_REQUEST_CHECKSUM_CALCULATION = $previousRequestChecksumCalculation + } + + if ($null -eq $previousResponseChecksumValidation) { + Remove-Item Env:AWS_RESPONSE_CHECKSUM_VALIDATION -ErrorAction SilentlyContinue + } + else { + $env:AWS_RESPONSE_CHECKSUM_VALIDATION = $previousResponseChecksumValidation + } } if ($LASTEXITCODE -ne 0 -and -not $IgnoreFailure) {