Update deploy.yml

This commit is contained in:
Vaica committed 2026-06-27 19:55:09 +08:00
1 parent 045c2f211e
commit 5752b53591
1 file changed
+116 -119
+116 -119
View File
@@ -181,7 +181,10 @@ jobs:
- name: Generate build hash
id: hash
run: echo "build_hash=$(find public -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum | awk '{print $1}')" >> $GITHUB_OUTPUT
run: |
BUILD_HASH=$(find public -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum | awk '{print $1}')
echo "build_hash=${BUILD_HASH}" >> $GITHUB_OUTPUT
echo "$BUILD_HASH" > public/.build_hash
- name: Build statistics
id: stats
@@ -235,6 +238,7 @@ jobs:
timeout-minutes: 10
permissions:
contents: read
actions: read
needs: build
outputs:
deployed: ${{ steps.check.outputs.deployed }}
@@ -247,61 +251,77 @@ jobs:
id: start-edgeone
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
- name: Check build hash cache
id: cache-check
uses: actions/cache/restore@v4
with:
path: .last_deploy_hash
key: ${{ runner.os }}-deploy-edgeone-${{ needs.build.outputs.build_hash }}
restore-keys: |
${{ runner.os }}-deploy-edgeone-
- name: Check if deployment is needed
id: check
- name: Get last successful run info
id: last-run
run: |
CURRENT_HASH="${{ needs.build.outputs.build_hash }}"
echo "当前 build_hash: $CURRENT_HASH"
echo "🔍 查找上一次成功部署的 hash..."
if [ -f .last_deploy_hash ]; then
LAST_HASH=$(cat .last_deploy_hash)
echo "上次部署 hash: $LAST_HASH"
if [ "$CURRENT_HASH" = "$LAST_HASH" ]; then
echo "✅ 构建产物无变化,跳过 EdgeOne 部署"
echo "deployed=false" >> $GITHUB_OUTPUT
echo "skip_reason=hash_match" >> $GITHUB_OUTPUT
exit 0
fi
# 获取上一个成功的 workflow run(排除当前 run)
LAST_RUN=$(gh api repos/${{ github.repository }}/actions/runs \
--jq '.workflow_runs[] | select(.conclusion == "success") | select(.id != $RUN_ID) | {id: .id, head_sha: .head_sha}' \
--paginate \
--limit 10 \
-F run_id=${{ github.run_id }} 2>/dev/null | head -2)
if [ -z "$LAST_RUN" ]; then
echo "没有找到上一次成功运行的记录"
echo "last_run_id=" >> $GITHUB_OUTPUT
echo "last_hash=" >> $GITHUB_OUTPUT
else
LAST_RUN_ID=$(echo "$LAST_RUN" | jq -r '.id')
LAST_SHA=$(echo "$LAST_RUN" | jq -r '.head_sha')
echo "上次成功运行 ID: $LAST_RUN_ID"
echo "上次成功运行 SHA: $LAST_SHA"
echo "last_run_id=${LAST_RUN_ID}" >> $GITHUB_OUTPUT
fi
echo "🔄 构建产物有变化,需要部署到 EdgeOne"
echo "deployed=true" >> $GITHUB_OUTPUT
- name: Start download timing
if: steps.check.outputs.deployed == 'true'
id: start-edgeone-download
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
- name: Download last artifact and get hash
id: last-hash
if: steps.last-run.outputs.last_run_id != ''
run: |
LAST_RUN_ID="${{ steps.last-run.outputs.last_run_id }}"
echo "� 下载上次成功的 artifact..."
gh api repos/${{ github.repository }}/actions/runs/$LAST_RUN_ID/artifacts \
--jq '.artifacts[] | select(.name == "hugo-public") | .id' > /tmp/last_artifact_id.txt
LAST_ARTIFACT_ID=$(cat /tmp/last_artifact_id.txt)
if [ -n "$LAST_ARTIFACT_ID" ]; then
gh api repos/${{ github.repository }}/actions/artifacts/$LAST_ARTIFACT_ID/archive --output /tmp/last_artifact.zip
unzip -p /tmp/last_artifact.zip .build_hash 2>/dev/null || echo ""
LAST_HASH=$(unzip -p /tmp/last_artifact.zip .build_hash 2>/dev/null)
echo "上次部署 hash: $LAST_HASH"
echo "last_hash=${LAST_HASH}" >> $GITHUB_OUTPUT
fi
- name: Checkout code (for scripts)
if: steps.check.outputs.deployed == 'true'
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Download build artifact
if: steps.check.outputs.deployed == 'true'
uses: actions/download-artifact@v4
with:
name: hugo-public
path: public/
- name: End download timing
if: steps.check.outputs.deployed == 'true'
id: end-edgeone-download
- name: Check if deployment is needed
id: check
run: |
end_time=$(date +%s)
start_time=${{ steps.start-edgeone-download.outputs.start_time }}
duration=$((end_time - start_time))
echo "duration=${duration}" >> $GITHUB_OUTPUT
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "")
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
echo "当前 build_hash: $CURRENT_HASH"
echo "上次部署 hash: $LAST_HASH"
if [ -z "$LAST_HASH" ] || [ "$CURRENT_HASH" != "$LAST_HASH" ]; then
echo "🔄 构建产物有变化,需要部署到 EdgeOne"
echo "deployed=true" >> $GITHUB_OUTPUT
else
echo "✅ 构建产物无变化,跳过 EdgeOne 部署"
echo "deployed=false" >> $GITHUB_OUTPUT
fi
- name: Start upload timing
if: steps.check.outputs.deployed == 'true'
@@ -325,17 +345,6 @@ jobs:
duration=$((end_time - start_time))
echo "duration=${duration}" >> $GITHUB_OUTPUT
- name: Save deploy hash
if: steps.check.outputs.deployed == 'true'
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
- name: Save build hash cache
if: steps.check.outputs.deployed == 'true'
uses: actions/cache/save@v4
with:
path: .last_deploy_hash
key: ${{ runner.os }}-deploy-edgeone-${{ needs.build.outputs.build_hash }}
- name: End timing
id: end-edgeone
run: |
@@ -345,16 +354,10 @@ jobs:
echo "duration=${duration}" >> $GITHUB_OUTPUT
if [ "${{ steps.check.outputs.deployed }}" = "true" ]; then
download_duration=${{ steps.end-edgeone-download.outputs.duration }}
upload_duration=${{ steps.end-edgeone-upload.outputs.duration }}
echo "download_duration=${download_duration}" >> $GITHUB_OUTPUT
echo "upload_duration=${upload_duration}" >> $GITHUB_OUTPUT
echo "## ⏱️ Deploy EdgeOne 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
echo "- **下载 Artifact**: ${download_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${upload_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
else
echo "## EdgeOne 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
@@ -369,6 +372,7 @@ jobs:
timeout-minutes: 20
permissions:
contents: read
actions: read
needs: build
outputs:
deployed: ${{ steps.check.outputs.deployed }}
@@ -381,61 +385,77 @@ jobs:
id: start-upyun
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
- name: Check build hash cache
id: cache-check
uses: actions/cache/restore@v4
with:
path: .last_deploy_hash
key: ${{ runner.os }}-deploy-upyun-${{ needs.build.outputs.build_hash }}
restore-keys: |
${{ runner.os }}-deploy-upyun-
- name: Check if deployment is needed
id: check
- name: Get last successful run info
id: last-run
run: |
CURRENT_HASH="${{ needs.build.outputs.build_hash }}"
echo "当前 build_hash: $CURRENT_HASH"
echo "🔍 查找上一次成功部署的 hash..."
if [ -f .last_deploy_hash ]; then
LAST_HASH=$(cat .last_deploy_hash)
echo "上次部署 hash: $LAST_HASH"
if [ "$CURRENT_HASH" = "$LAST_HASH" ]; then
echo "✅ 构建产物无变化,跳过 UpYun 部署"
echo "deployed=false" >> $GITHUB_OUTPUT
echo "skip_reason=hash_match" >> $GITHUB_OUTPUT
exit 0
fi
# 获取上一个成功的 workflow run(排除当前 run)
LAST_RUN=$(gh api repos/${{ github.repository }}/actions/runs \
--jq '.workflow_runs[] | select(.conclusion == "success") | select(.id != $RUN_ID) | {id: .id, head_sha: .head_sha}' \
--paginate \
--limit 10 \
-F run_id=${{ github.run_id }} 2>/dev/null | head -2)
if [ -z "$LAST_RUN" ]; then
echo "没有找到上一次成功运行的记录"
echo "last_run_id=" >> $GITHUB_OUTPUT
echo "last_hash=" >> $GITHUB_OUTPUT
else
LAST_RUN_ID=$(echo "$LAST_RUN" | jq -r '.id')
LAST_SHA=$(echo "$LAST_RUN" | jq -r '.head_sha')
echo "上次成功运行 ID: $LAST_RUN_ID"
echo "上次成功运行 SHA: $LAST_SHA"
echo "last_run_id=${LAST_RUN_ID}" >> $GITHUB_OUTPUT
fi
echo "🔄 构建产物有变化,需要部署到 UpYun"
echo "deployed=true" >> $GITHUB_OUTPUT
- name: Start download timing
if: steps.check.outputs.deployed == 'true'
id: start-upyun-download
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
- name: Download last artifact and get hash
id: last-hash
if: steps.last-run.outputs.last_run_id != ''
run: |
LAST_RUN_ID="${{ steps.last-run.outputs.last_run_id }}"
echo "� 下载上次成功的 artifact..."
gh api repos/${{ github.repository }}/actions/runs/$LAST_RUN_ID/artifacts \
--jq '.artifacts[] | select(.name == "hugo-public") | .id' > /tmp/last_artifact_id.txt
LAST_ARTIFACT_ID=$(cat /tmp/last_artifact_id.txt)
if [ -n "$LAST_ARTIFACT_ID" ]; then
gh api repos/${{ github.repository }}/actions/artifacts/$LAST_ARTIFACT_ID/archive --output /tmp/last_artifact.zip
unzip -p /tmp/last_artifact.zip .build_hash 2>/dev/null || echo ""
LAST_HASH=$(unzip -p /tmp/last_artifact.zip .build_hash 2>/dev/null)
echo "上次部署 hash: $LAST_HASH"
echo "last_hash=${LAST_HASH}" >> $GITHUB_OUTPUT
fi
- name: Checkout code (for scripts)
if: steps.check.outputs.deployed == 'true'
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Download build artifact
if: steps.check.outputs.deployed == 'true'
uses: actions/download-artifact@v4
with:
name: hugo-public
path: public/
- name: End download timing
if: steps.check.outputs.deployed == 'true'
id: end-upyun-download
- name: Check if deployment is needed
id: check
run: |
end_time=$(date +%s)
start_time=${{ steps.start-upyun-download.outputs.start_time }}
duration=$((end_time - start_time))
echo "duration=${duration}" >> $GITHUB_OUTPUT
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "")
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
echo "当前 build_hash: $CURRENT_HASH"
echo "上次部署 hash: $LAST_HASH"
if [ -z "$LAST_HASH" ] || [ "$CURRENT_HASH" != "$LAST_HASH" ]; then
echo "🔄 构建产物有变化,需要部署到 UpYun"
echo "deployed=true" >> $GITHUB_OUTPUT
else
echo "✅ 构建产物无变化,跳过 UpYun 部署"
echo "deployed=false" >> $GITHUB_OUTPUT
fi
- name: Start upload timing
if: steps.check.outputs.deployed == 'true'
@@ -461,17 +481,6 @@ jobs:
duration=$((end_time - start_time))
echo "duration=${duration}" >> $GITHUB_OUTPUT
- name: Save deploy hash
if: steps.check.outputs.deployed == 'true'
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
- name: Save build hash cache
if: steps.check.outputs.deployed == 'true'
uses: actions/cache/save@v4
with:
path: .last_deploy_hash
key: ${{ runner.os }}-deploy-upyun-${{ needs.build.outputs.build_hash }}
- name: End timing
id: end-upyun
run: |
@@ -481,16 +490,10 @@ jobs:
echo "duration=${total_duration}" >> $GITHUB_OUTPUT
if [ "${{ steps.check.outputs.deployed }}" = "true" ]; then
download_duration=${{ steps.end-upyun-download.outputs.duration }}
upload_duration=${{ steps.end-upyun-upload.outputs.duration }}
echo "download_duration=${download_duration}" >> $GITHUB_OUTPUT
echo "upload_duration=${upload_duration}" >> $GITHUB_OUTPUT
echo "## ⏱️ Deploy UpYun 耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
echo "- **下载 Artifact**: ${download_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${upload_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **上传部署**: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY
else
@@ -832,12 +835,6 @@ jobs:
with:
name: hugo-public
- name: Clean up old caches
continue-on-error: true
run: |
gh extension install actions/gh-actions-cache || true
gh actions-cache delete --all --confirm || true
# ============================================================
# Job 6: Failure Notification (失败通知)
# ============================================================