Update deploy.yml

This commit is contained in:
Vaica committed 2026-06-29 17:26:39 +08:00
1 parent 4cc9f0d5e1
commit a48a06e7fa
1 file changed
+90 -55
+90 -55
View File
@@ -115,6 +115,7 @@ jobs:
duration: ${{ steps.end-build.outputs.duration }} duration: ${{ steps.end-build.outputs.duration }}
file_count: ${{ steps.stats.outputs.file_count }} file_count: ${{ steps.stats.outputs.file_count }}
total_size: ${{ steps.stats.outputs.total_size }} total_size: ${{ steps.stats.outputs.total_size }}
skipped: ${{ steps.upload.outputs.skipped }}
needs: pre-check needs: pre-check
if: needs.pre-check.outputs.can_deploy == 'true' if: needs.pre-check.outputs.can_deploy == 'true'
@@ -194,20 +195,14 @@ jobs:
echo "file_count=${FILE_COUNT}" >> $GITHUB_OUTPUT echo "file_count=${FILE_COUNT}" >> $GITHUB_OUTPUT
echo "total_size=${TOTAL_SIZE}" >> $GITHUB_OUTPUT echo "total_size=${TOTAL_SIZE}" >> $GITHUB_OUTPUT
- name: Upload build artifact - name: Upload to UpYun and check hash
uses: actions/upload-artifact@v4
with:
name: hugo-public
path: public/
retention-days: 1
- name: Upload build hash to UpYun
env: env:
UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }} UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }}
UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }} UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }}
UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }} UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }}
id: upload
run: | run: |
echo "📤 上传 build_hash 到 UpYun..." echo "📤 上传构建产物到 UpYun..."
UPX_VERSION="0.4.9" UPX_VERSION="0.4.9"
UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz" UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz"
@@ -221,8 +216,24 @@ jobs:
fi fi
"$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD" "$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD"
"$UPX_BIN" put public/.build_hash /__build_hash
echo "✅ build_hash 已上传到 UpYun" # 获取上次部署的哈希
LAST_HASH=$("$UPX_BIN" get /__build_hash 2>/dev/null || echo "")
CURRENT_HASH=$(cat public/.build_hash)
echo "上次部署 hash: $LAST_HASH"
echo "当前构建 hash: $CURRENT_HASH"
if [ "$CURRENT_HASH" = "$LAST_HASH" ]; then
echo "✅ 构建产物无变化,跳过上传"
echo "skipped=true" >> $GITHUB_OUTPUT
else
echo "🔄 发现变化,开始上传..."
"$UPX_BIN" sync public/ / -w 10 --delete --strong
"$UPX_BIN" put public/.build_hash /__build_hash
echo "✅ 上传完成"
echo "skipped=false" >> $GITHUB_OUTPUT
fi
- name: Push Image Optimizations - name: Push Image Optimizations
continue-on-error: true continue-on-error: true
@@ -308,16 +319,42 @@ jobs:
with: with:
fetch-depth: 1 fetch-depth: 1
- name: Download build artifact - name: Download from UpYun
uses: actions/download-artifact@v4 id: download
with: env:
name: hugo-public UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }}
path: public/ UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }}
UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }}
run: |
echo "📥 从 UpYun 下载构建产物..."
UPX_VERSION="0.4.9"
UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz"
UPX_BIN="/tmp/upyun-upx"
if [ ! -x "$UPX_BIN" ]; then
curl -sL "$UPX_URL" -o /tmp/upx.tar.gz
tar -xzf /tmp/upx.tar.gz -C /tmp
mv /tmp/upx "$UPX_BIN"
chmod +x "$UPX_BIN"
fi
"$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD"
DOWNLOAD_START=$(date +%s)
"$UPX_BIN" sync -r / public/ /
"$UPX_BIN" get /__build_hash > /tmp/current_hash 2>/dev/null || echo ""
DOWNLOAD_END=$(date +%s)
DOWNLOAD_DURATION=$((DOWNLOAD_END - DOWNLOAD_START))
echo "download_duration=${DOWNLOAD_DURATION}" >> $GITHUB_OUTPUT
CURRENT_HASH=$(cat /tmp/current_hash 2>/dev/null || echo "")
echo "current_hash=${CURRENT_HASH}" >> $GITHUB_OUTPUT
- name: Check if deployment is needed - name: Check if deployment is needed
id: check id: check
run: | run: |
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "") CURRENT_HASH="${{ steps.download.outputs.current_hash }}"
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}" LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
echo "当前 build_hash: $CURRENT_HASH" echo "当前 build_hash: $CURRENT_HASH"
@@ -365,6 +402,7 @@ jobs:
echo "## ⏱️ Deploy EdgeOne 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY echo "## ⏱️ Deploy EdgeOne 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
echo "- **下载: ${{ steps.download.outputs.download_duration }}s**" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${duration}秒" >> $GITHUB_STEP_SUMMARY echo "- **上传部署**: ${duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
else else
@@ -427,53 +465,55 @@ jobs:
with: with:
fetch-depth: 1 fetch-depth: 1
- name: Download build artifact - name: Download from UpYun
uses: actions/download-artifact@v4 id: download
with: env:
name: hugo-public UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }}
path: public/ UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }}
UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }}
run: |
echo "📥 从 UpYun 同步构建产物..."
UPX_VERSION="0.4.9"
UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz"
UPX_BIN="/tmp/upyun-upx"
if [ ! -x "$UPX_BIN" ]; then
curl -sL "$UPX_URL" -o /tmp/upx.tar.gz
tar -xzf /tmp/upx.tar.gz -C /tmp
mv /tmp/upx "$UPX_BIN"
chmod +x "$UPX_BIN"
fi
"$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD"
DOWNLOAD_START=$(date +%s)
"$UPX_BIN" sync -r / public/ /
"$UPX_BIN" get /__build_hash > /tmp/current_hash 2>/dev/null || echo ""
DOWNLOAD_END=$(date +%s)
DOWNLOAD_DURATION=$((DOWNLOAD_END - DOWNLOAD_START))
echo "download_duration=${DOWNLOAD_DURATION}" >> $GITHUB_OUTPUT
CURRENT_HASH=$(cat /tmp/current_hash 2>/dev/null || echo "")
echo "current_hash=${CURRENT_HASH}" >> $GITHUB_OUTPUT
- name: Check if deployment is needed - name: Check if deployment is needed
id: check id: check
run: | run: |
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "") CURRENT_HASH="${{ steps.download.outputs.current_hash }}"
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}" LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
echo "当前 build_hash: $CURRENT_HASH" echo "当前 build_hash: $CURRENT_HASH"
echo "上次部署 hash: $LAST_HASH" echo "上次部署 hash: $LAST_HASH"
if [ -z "$LAST_HASH" ] || [ "$CURRENT_HASH" != "$LAST_HASH" ]; then if [ -z "$LAST_HASH" ] || [ "$CURRENT_HASH" != "$LAST_HASH" ]; then
echo "🔄 构建产物有变化,需要部署到 UpYun" echo "🔄 构建产物有变化,UpYun 已同步最新内容"
echo "deployed=true" >> $GITHUB_OUTPUT echo "deployed=true" >> $GITHUB_OUTPUT
else else
echo "✅ 构建产物无变化,跳过 UpYun 部署" echo "✅ 构建产物无变化,UpYun 无需更新"
echo "deployed=false" >> $GITHUB_OUTPUT echo "deployed=false" >> $GITHUB_OUTPUT
fi fi
- name: Start upload timing
if: steps.check.outputs.deployed == 'true'
id: start-upyun-upload
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
- name: Deploy to UpYun
if: steps.check.outputs.deployed == 'true'
env:
UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }}
UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }}
UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }}
run: |
chmod +x scripts/deploy_upyun.sh
./scripts/deploy_upyun.sh ./public / 20
- name: End upload timing
if: steps.check.outputs.deployed == 'true'
id: end-upyun-upload
run: |
end_time=$(date +%s)
start_time=${{ steps.start-upyun-upload.outputs.start_time }}
duration=$((end_time - start_time))
echo "duration=${duration}" >> $GITHUB_OUTPUT
- name: End timing - name: End timing
id: end-upyun id: end-upyun
run: | run: |
@@ -486,7 +526,7 @@ jobs:
echo "## ⏱️ Deploy UpYun 耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY echo "## ⏱️ Deploy UpYun 耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY echo "- **下载: ${{ steps.download.outputs.download_duration }}s**" >> $GITHUB_STEP_SUMMARY
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY
else else
@@ -823,11 +863,6 @@ jobs:
echo "| UpYun | ${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY echo "| UpYun | ${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY
echo "| CDN 刷新 | ${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅ 已刷新' || '⏭️ 跳过' }} |" >> $GITHUB_STEP_SUMMARY echo "| CDN 刷新 | ${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅ 已刷新' || '⏭️ 跳过' }} |" >> $GITHUB_STEP_SUMMARY
- name: Clean up build artifact
uses: actions/delete-artifact@v4
with:
name: hugo-public
# ============================================================ # ============================================================
# Job 6: Failure Notification (失败通知) # Job 6: Failure Notification (失败通知)
# ============================================================ # ============================================================