Update deploy.yml
This commit is contained in:
1 parent
9a9dbb264f
commit
24da094906
1 file changed
+89
-54
@@ -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"
|
||||||
|
|
||||||
|
# 获取上次部署的哈希
|
||||||
|
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
|
"$UPX_BIN" put public/.build_hash /__build_hash
|
||||||
echo "✅ build_hash 已上传到 UpYun"
|
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 (失败通知)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
Reference in new issue
Block a user