ci: migrate artifact upload step to cloudflare r2 (#4142)

This commit is contained in:
loverustfs
2026-07-01 20:04:31 +08:00
committed by GitHub
parent c0dfc260ca
commit f7e3fc780f
+26 -58
View File
@@ -465,79 +465,47 @@ jobs:
path: "rustfs-*.zip" path: "rustfs-*.zip"
retention-days: ${{ startsWith(github.ref, 'refs/tags/') && 30 || 7 }} retention-days: ${{ startsWith(github.ref, 'refs/tags/') && 30 || 7 }}
- name: Upload to Aliyun OSS - name: Upload to Cloudflare R2
if: env.OSS_ACCESS_KEY_ID != '' && (needs.build-check.outputs.build_type == 'release' || needs.build-check.outputs.build_type == 'prerelease' || needs.build-check.outputs.build_type == 'development') if: env.R2_ACCESS_KEY_ID != '' && (needs.build-check.outputs.build_type == 'release' || needs.build-check.outputs.build_type == 'prerelease' || needs.build-check.outputs.build_type == 'development')
env: env:
OSS_ACCESS_KEY_ID: ${{ secrets.ALICLOUDOSS_KEY_ID }} R2_ACCESS_KEY_ID: ${{ secrets.R2_ACCESS_KEY_ID }}
OSS_ACCESS_KEY_SECRET: ${{ secrets.ALICLOUDOSS_KEY_SECRET }} R2_SECRET_ACCESS_KEY: ${{ secrets.R2_SECRET_ACCESS_KEY }}
OSS_REGION: cn-beijing R2_ENDPOINT: ${{ secrets.R2_ENDPOINT }}
OSS_ENDPOINT: https://oss-accelerate.aliyuncs.com R2_BUCKET: ${{ secrets.R2_BUCKET }}
AWS_EC2_METADATA_DISABLED: true
shell: bash shell: bash
run: | run: |
BUILD_TYPE="${{ needs.build-check.outputs.build_type }}" BUILD_TYPE="${{ needs.build-check.outputs.build_type }}"
# Install ossutil (platform-specific) if [[ -z "$R2_ACCESS_KEY_ID" || -z "$R2_SECRET_ACCESS_KEY" || -z "$R2_ENDPOINT" || -z "$R2_BUCKET" ]]; then
OSSUTIL_VERSION="2.1.1" echo "⚠️ R2 credentials or endpoint missing, skipping artifact upload"
case "${{ matrix.platform }}" in exit 0
linux) fi
if [[ "$(uname -m)" == "arm64" ]]; then
ARCH="arm64"
else
ARCH="amd64"
fi
OSSUTIL_ZIP="ossutil-${OSSUTIL_VERSION}-linux-${ARCH}.zip"
OSSUTIL_DIR="ossutil-${OSSUTIL_VERSION}-linux-${ARCH}"
curl -o "$OSSUTIL_ZIP" "https://gosspublic.alicdn.com/ossutil/v2/${OSSUTIL_VERSION}/${OSSUTIL_ZIP}" if ! command -v aws >/dev/null 2>&1; then
unzip "$OSSUTIL_ZIP" echo "❌ aws CLI not found on runner; cannot upload to R2"
mv "${OSSUTIL_DIR}/ossutil" /usr/local/bin/ exit 1
rm -rf "$OSSUTIL_DIR" "$OSSUTIL_ZIP" fi
chmod +x /usr/local/bin/ossutil
OSSUTIL_BIN=ossutil
;;
macos)
if [[ "$(uname -m)" == "arm64" ]]; then
ARCH="arm64"
else
ARCH="amd64"
fi
OSSUTIL_ZIP="ossutil-${OSSUTIL_VERSION}-mac-${ARCH}.zip"
OSSUTIL_DIR="ossutil-${OSSUTIL_VERSION}-mac-${ARCH}"
curl -o "$OSSUTIL_ZIP" "https://gosspublic.alicdn.com/ossutil/v2/${OSSUTIL_VERSION}/${OSSUTIL_ZIP}" export AWS_ACCESS_KEY_ID="$R2_ACCESS_KEY_ID"
unzip "$OSSUTIL_ZIP" export AWS_SECRET_ACCESS_KEY="$R2_SECRET_ACCESS_KEY"
mv "${OSSUTIL_DIR}/ossutil" /usr/local/bin/ export AWS_DEFAULT_REGION="auto"
rm -rf "$OSSUTIL_DIR" "$OSSUTIL_ZIP"
chmod +x /usr/local/bin/ossutil
OSSUTIL_BIN=ossutil
;;
windows)
OSSUTIL_ZIP="ossutil-${OSSUTIL_VERSION}-windows-amd64.zip"
OSSUTIL_DIR="ossutil-${OSSUTIL_VERSION}-windows-amd64"
curl -o "$OSSUTIL_ZIP" "https://gosspublic.alicdn.com/ossutil/v2/${OSSUTIL_VERSION}/${OSSUTIL_ZIP}"
unzip "$OSSUTIL_ZIP"
mv "${OSSUTIL_DIR}/ossutil.exe" ./ossutil.exe
rm -rf "$OSSUTIL_DIR" "$OSSUTIL_ZIP"
OSSUTIL_BIN=./ossutil.exe
;;
esac
# Determine upload path based on build type # Determine upload path based on build type
if [[ "$BUILD_TYPE" == "development" ]]; then if [[ "$BUILD_TYPE" == "development" ]]; then
OSS_PATH="oss://rustfs-artifacts/artifacts/rustfs/dev/" R2_PATH="s3://${R2_BUCKET}/artifacts/rustfs/dev/"
echo "📤 Uploading development build to OSS dev directory" echo "📤 Uploading development build to R2 dev directory"
else else
OSS_PATH="oss://rustfs-artifacts/artifacts/rustfs/release/" R2_PATH="s3://${R2_BUCKET}/artifacts/rustfs/release/"
echo "📤 Uploading release build to OSS release directory" echo "📤 Uploading release build to R2 release directory"
fi fi
# Upload all rustfs zip files to OSS using glob pattern # Upload all rustfs zip files to R2 using S3-compatible API
echo "📤 Uploading all rustfs-*.zip files to $OSS_PATH..." echo "📤 Uploading all rustfs-*.zip files to $R2_PATH..."
for zip_file in rustfs-*.zip; do for zip_file in rustfs-*.zip; do
if [[ -f "$zip_file" ]]; then if [[ -f "$zip_file" ]]; then
echo "Uploading: $zip_file to $OSS_PATH..." echo "Uploading: $zip_file to $R2_PATH..."
$OSSUTIL_BIN cp "$zip_file" "$OSS_PATH" --force aws s3 cp "$zip_file" "$R2_PATH" --endpoint-url "$R2_ENDPOINT" --only-show-errors
echo "✅ Uploaded: $zip_file" echo "✅ Uploaded: $zip_file"
fi fi
done done