Update deploy.yml
This commit is contained in:
1 parent
045c2f211e
commit
5752b53591
1 file changed
+116
-119
+116
-119
@@ -181,7 +181,10 @@ jobs:
|
|||||||
|
|
||||||
- name: Generate build hash
|
- name: Generate build hash
|
||||||
id: 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
|
- name: Build statistics
|
||||||
id: stats
|
id: stats
|
||||||
@@ -235,6 +238,7 @@ jobs:
|
|||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
actions: read
|
||||||
needs: build
|
needs: build
|
||||||
outputs:
|
outputs:
|
||||||
deployed: ${{ steps.check.outputs.deployed }}
|
deployed: ${{ steps.check.outputs.deployed }}
|
||||||
@@ -247,61 +251,77 @@ jobs:
|
|||||||
id: start-edgeone
|
id: start-edgeone
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Check build hash cache
|
- name: Get last successful run info
|
||||||
id: cache-check
|
id: last-run
|
||||||
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
|
|
||||||
run: |
|
run: |
|
||||||
CURRENT_HASH="${{ needs.build.outputs.build_hash }}"
|
echo "🔍 查找上一次成功部署的 hash..."
|
||||||
echo "当前 build_hash: $CURRENT_HASH"
|
|
||||||
|
|
||||||
if [ -f .last_deploy_hash ]; then
|
# 获取上一个成功的 workflow run(排除当前 run)
|
||||||
LAST_HASH=$(cat .last_deploy_hash)
|
LAST_RUN=$(gh api repos/${{ github.repository }}/actions/runs \
|
||||||
echo "上次部署 hash: $LAST_HASH"
|
--jq '.workflow_runs[] | select(.conclusion == "success") | select(.id != $RUN_ID) | {id: .id, head_sha: .head_sha}' \
|
||||||
if [ "$CURRENT_HASH" = "$LAST_HASH" ]; then
|
--paginate \
|
||||||
echo "✅ 构建产物无变化,跳过 EdgeOne 部署"
|
--limit 10 \
|
||||||
echo "deployed=false" >> $GITHUB_OUTPUT
|
-F run_id=${{ github.run_id }} 2>/dev/null | head -2)
|
||||||
echo "skip_reason=hash_match" >> $GITHUB_OUTPUT
|
|
||||||
exit 0
|
if [ -z "$LAST_RUN" ]; then
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
echo "🔄 构建产物有变化,需要部署到 EdgeOne"
|
|
||||||
echo "deployed=true" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Start download timing
|
- name: Download last artifact and get hash
|
||||||
if: steps.check.outputs.deployed == 'true'
|
id: last-hash
|
||||||
id: start-edgeone-download
|
if: steps.last-run.outputs.last_run_id != ''
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
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)
|
- name: Checkout code (for scripts)
|
||||||
if: steps.check.outputs.deployed == 'true'
|
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
- name: Download build artifact
|
- name: Download build artifact
|
||||||
if: steps.check.outputs.deployed == 'true'
|
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: hugo-public
|
name: hugo-public
|
||||||
path: public/
|
path: public/
|
||||||
|
|
||||||
- name: End download timing
|
- name: Check if deployment is needed
|
||||||
if: steps.check.outputs.deployed == 'true'
|
id: check
|
||||||
id: end-edgeone-download
|
|
||||||
run: |
|
run: |
|
||||||
end_time=$(date +%s)
|
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "")
|
||||||
start_time=${{ steps.start-edgeone-download.outputs.start_time }}
|
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
|
||||||
duration=$((end_time - start_time))
|
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
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
|
- name: Start upload timing
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
@@ -325,17 +345,6 @@ jobs:
|
|||||||
duration=$((end_time - start_time))
|
duration=$((end_time - start_time))
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
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
|
- name: End timing
|
||||||
id: end-edgeone
|
id: end-edgeone
|
||||||
run: |
|
run: |
|
||||||
@@ -345,16 +354,10 @@ jobs:
|
|||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
if [ "${{ steps.check.outputs.deployed }}" = "true" ]; then
|
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 "## ⏱️ Deploy EdgeOne 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
|
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **下载 Artifact**: ${download_duration}秒" >> $GITHUB_STEP_SUMMARY
|
echo "- **上传部署**: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **上传部署**: ${upload_duration}秒" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
echo "## EdgeOne 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
echo "## EdgeOne 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
||||||
@@ -369,6 +372,7 @@ jobs:
|
|||||||
timeout-minutes: 20
|
timeout-minutes: 20
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
actions: read
|
||||||
needs: build
|
needs: build
|
||||||
outputs:
|
outputs:
|
||||||
deployed: ${{ steps.check.outputs.deployed }}
|
deployed: ${{ steps.check.outputs.deployed }}
|
||||||
@@ -381,61 +385,77 @@ jobs:
|
|||||||
id: start-upyun
|
id: start-upyun
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Check build hash cache
|
- name: Get last successful run info
|
||||||
id: cache-check
|
id: last-run
|
||||||
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
|
|
||||||
run: |
|
run: |
|
||||||
CURRENT_HASH="${{ needs.build.outputs.build_hash }}"
|
echo "🔍 查找上一次成功部署的 hash..."
|
||||||
echo "当前 build_hash: $CURRENT_HASH"
|
|
||||||
|
|
||||||
if [ -f .last_deploy_hash ]; then
|
# 获取上一个成功的 workflow run(排除当前 run)
|
||||||
LAST_HASH=$(cat .last_deploy_hash)
|
LAST_RUN=$(gh api repos/${{ github.repository }}/actions/runs \
|
||||||
echo "上次部署 hash: $LAST_HASH"
|
--jq '.workflow_runs[] | select(.conclusion == "success") | select(.id != $RUN_ID) | {id: .id, head_sha: .head_sha}' \
|
||||||
if [ "$CURRENT_HASH" = "$LAST_HASH" ]; then
|
--paginate \
|
||||||
echo "✅ 构建产物无变化,跳过 UpYun 部署"
|
--limit 10 \
|
||||||
echo "deployed=false" >> $GITHUB_OUTPUT
|
-F run_id=${{ github.run_id }} 2>/dev/null | head -2)
|
||||||
echo "skip_reason=hash_match" >> $GITHUB_OUTPUT
|
|
||||||
exit 0
|
if [ -z "$LAST_RUN" ]; then
|
||||||
fi
|
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
|
fi
|
||||||
|
|
||||||
echo "🔄 构建产物有变化,需要部署到 UpYun"
|
|
||||||
echo "deployed=true" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Start download timing
|
- name: Download last artifact and get hash
|
||||||
if: steps.check.outputs.deployed == 'true'
|
id: last-hash
|
||||||
id: start-upyun-download
|
if: steps.last-run.outputs.last_run_id != ''
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
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)
|
- name: Checkout code (for scripts)
|
||||||
if: steps.check.outputs.deployed == 'true'
|
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
|
|
||||||
- name: Download build artifact
|
- name: Download build artifact
|
||||||
if: steps.check.outputs.deployed == 'true'
|
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: hugo-public
|
name: hugo-public
|
||||||
path: public/
|
path: public/
|
||||||
|
|
||||||
- name: End download timing
|
- name: Check if deployment is needed
|
||||||
if: steps.check.outputs.deployed == 'true'
|
id: check
|
||||||
id: end-upyun-download
|
|
||||||
run: |
|
run: |
|
||||||
end_time=$(date +%s)
|
CURRENT_HASH=$(cat public/.build_hash 2>/dev/null || echo "")
|
||||||
start_time=${{ steps.start-upyun-download.outputs.start_time }}
|
LAST_HASH="${{ steps.last-hash.outputs.last_hash }}"
|
||||||
duration=$((end_time - start_time))
|
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
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
|
- name: Start upload timing
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
@@ -461,17 +481,6 @@ jobs:
|
|||||||
duration=$((end_time - start_time))
|
duration=$((end_time - start_time))
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
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
|
- name: End timing
|
||||||
id: end-upyun
|
id: end-upyun
|
||||||
run: |
|
run: |
|
||||||
@@ -481,16 +490,10 @@ jobs:
|
|||||||
echo "duration=${total_duration}" >> $GITHUB_OUTPUT
|
echo "duration=${total_duration}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
if [ "${{ steps.check.outputs.deployed }}" = "true" ]; then
|
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 "## ⏱️ Deploy UpYun 耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
|
echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **下载 Artifact**: ${download_duration}秒" >> $GITHUB_STEP_SUMMARY
|
echo "- **上传部署**: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "- **上传部署**: ${upload_duration}秒" >> $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
|
||||||
@@ -832,12 +835,6 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
name: hugo-public
|
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 (失败通知)
|
# Job 6: Failure Notification (失败通知)
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
Reference in new issue
Block a user