Update deploy.yml
This commit is contained in:
1 parent
4c5dc5074f
commit
eeb9d4ecf9
1 file changed
+276
-69
+276
-69
@@ -24,6 +24,7 @@ jobs:
|
|||||||
timeout-minutes: 2
|
timeout-minutes: 2
|
||||||
outputs:
|
outputs:
|
||||||
can_deploy: ${{ steps.repo-check.outputs.can_deploy }}
|
can_deploy: ${{ steps.repo-check.outputs.can_deploy }}
|
||||||
|
duration: ${{ steps.end-pre-check.outputs.duration }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Start timing
|
- name: Start timing
|
||||||
@@ -90,6 +91,9 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
outputs:
|
outputs:
|
||||||
build_hash: ${{ steps.hash.outputs.build_hash }}
|
build_hash: ${{ steps.hash.outputs.build_hash }}
|
||||||
|
duration: ${{ steps.end-build.outputs.duration }}
|
||||||
|
file_count: ${{ steps.stats.outputs.file_count }}
|
||||||
|
total_size: ${{ steps.stats.outputs.total_size }}
|
||||||
needs: pre-check
|
needs: pre-check
|
||||||
if: needs.pre-check.outputs.can_deploy == 'true'
|
if: needs.pre-check.outputs.can_deploy == 'true'
|
||||||
|
|
||||||
@@ -120,6 +124,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Cache Hugo resources
|
- name: Cache Hugo resources
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
|
id: hugo-cache
|
||||||
with:
|
with:
|
||||||
path: |
|
path: |
|
||||||
resources/_gen
|
resources/_gen
|
||||||
@@ -157,6 +162,14 @@ jobs:
|
|||||||
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: echo "build_hash=$(find public -type f -print0 | sort -z | xargs -0 sha256sum | sha256sum | awk '{print $1}')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Build statistics
|
||||||
|
id: stats
|
||||||
|
run: |
|
||||||
|
FILE_COUNT=$(find public -type f | wc -l)
|
||||||
|
TOTAL_SIZE=$(du -sh public | awk '{print $1}')
|
||||||
|
echo "file_count=${FILE_COUNT}" >> $GITHUB_OUTPUT
|
||||||
|
echo "total_size=${TOTAL_SIZE}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Upload build artifact
|
- name: Upload build artifact
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
@@ -185,7 +198,14 @@ jobs:
|
|||||||
start_time=${{ steps.start-build.outputs.start_time }}
|
start_time=${{ steps.start-build.outputs.start_time }}
|
||||||
duration=$((end_time - start_time))
|
duration=$((end_time - start_time))
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
echo "## ⏱️ Build 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
echo "## ⏱️ Build 耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "### 📊 构建统计" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **文件总数**: ${{ steps.stats.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **总大小**: ${{ steps.stats.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **构建哈希**: ${{ steps.hash.outputs.build_hash }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Hugo 缓存**: ${{ steps.hugo-cache.outputs.cache-hit == 'true' && '✅ 命中' || '🔄 未命中' }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Job 3: Deploy to EdgeOne Pages (并行)
|
# Job 3: Deploy to EdgeOne Pages (并行)
|
||||||
@@ -198,6 +218,9 @@ jobs:
|
|||||||
needs: build
|
needs: build
|
||||||
outputs:
|
outputs:
|
||||||
deployed: ${{ steps.check.outputs.deployed }}
|
deployed: ${{ steps.check.outputs.deployed }}
|
||||||
|
duration: ${{ steps.end-edgeone.outputs.duration }}
|
||||||
|
download_duration: ${{ steps.end-edgeone.outputs.download_duration }}
|
||||||
|
upload_duration: ${{ steps.end-edgeone.outputs.upload_duration }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Start timing
|
- name: Start timing
|
||||||
@@ -233,6 +256,11 @@ jobs:
|
|||||||
echo "🔄 构建产物有变化,需要部署到 EdgeOne"
|
echo "🔄 构建产物有变化,需要部署到 EdgeOne"
|
||||||
echo "deployed=true" >> $GITHUB_OUTPUT
|
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: Checkout code (for scripts)
|
- name: Checkout code (for scripts)
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -246,6 +274,20 @@ jobs:
|
|||||||
name: hugo-public
|
name: hugo-public
|
||||||
path: public/
|
path: public/
|
||||||
|
|
||||||
|
- name: End download timing
|
||||||
|
if: steps.check.outputs.deployed == 'true'
|
||||||
|
id: end-edgeone-download
|
||||||
|
run: |
|
||||||
|
end_time=$(date +%s)
|
||||||
|
start_time=${{ steps.start-edgeone-download.outputs.start_time }}
|
||||||
|
duration=$((end_time - start_time))
|
||||||
|
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Start upload timing
|
||||||
|
if: steps.check.outputs.deployed == 'true'
|
||||||
|
id: start-edgeone-upload
|
||||||
|
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Deploy to EdgeOne Pages
|
- name: Deploy to EdgeOne Pages
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
env:
|
env:
|
||||||
@@ -254,6 +296,15 @@ jobs:
|
|||||||
chmod +x scripts/deploy_edgeone.sh
|
chmod +x scripts/deploy_edgeone.sh
|
||||||
./scripts/deploy_edgeone.sh hugo-blog ./public overseas
|
./scripts/deploy_edgeone.sh hugo-blog ./public overseas
|
||||||
|
|
||||||
|
- name: End upload timing
|
||||||
|
if: steps.check.outputs.deployed == 'true'
|
||||||
|
id: end-edgeone-upload
|
||||||
|
run: |
|
||||||
|
end_time=$(date +%s)
|
||||||
|
start_time=${{ steps.start-edgeone-upload.outputs.start_time }}
|
||||||
|
duration=$((end_time - start_time))
|
||||||
|
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Save deploy hash
|
- name: Save deploy hash
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
|
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
|
||||||
@@ -272,8 +323,19 @@ jobs:
|
|||||||
start_time=${{ steps.start-edgeone.outputs.start_time }}
|
start_time=${{ steps.start-edgeone.outputs.start_time }}
|
||||||
duration=$((end_time - start_time))
|
duration=$((end_time - start_time))
|
||||||
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 "- **下载 Artifact**: ${download_duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **上传部署**: ${upload_duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
echo "## EdgeOne 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
echo "## EdgeOne 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "总耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
echo "总耗时: ${duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
@@ -290,6 +352,9 @@ jobs:
|
|||||||
needs: build
|
needs: build
|
||||||
outputs:
|
outputs:
|
||||||
deployed: ${{ steps.check.outputs.deployed }}
|
deployed: ${{ steps.check.outputs.deployed }}
|
||||||
|
duration: ${{ steps.end-upyun.outputs.duration }}
|
||||||
|
download_duration: ${{ steps.end-upyun.outputs.download_duration }}
|
||||||
|
upload_duration: ${{ steps.end-upyun.outputs.upload_duration }}
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Start timing
|
- name: Start timing
|
||||||
@@ -325,7 +390,7 @@ jobs:
|
|||||||
echo "🔄 构建产物有变化,需要部署到 UpYun"
|
echo "🔄 构建产物有变化,需要部署到 UpYun"
|
||||||
echo "deployed=true" >> $GITHUB_OUTPUT
|
echo "deployed=true" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Start artifact download timing
|
- name: Start download timing
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
id: start-upyun-download
|
id: start-upyun-download
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||||
@@ -343,7 +408,7 @@ jobs:
|
|||||||
name: hugo-public
|
name: hugo-public
|
||||||
path: public/
|
path: public/
|
||||||
|
|
||||||
- name: End artifact download timing
|
- name: End download timing
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
id: end-upyun-download
|
id: end-upyun-download
|
||||||
run: |
|
run: |
|
||||||
@@ -351,9 +416,8 @@ jobs:
|
|||||||
start_time=${{ steps.start-upyun-download.outputs.start_time }}
|
start_time=${{ steps.start-upyun-download.outputs.start_time }}
|
||||||
duration=$((end_time - start_time))
|
duration=$((end_time - start_time))
|
||||||
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
echo "duration=${duration}" >> $GITHUB_OUTPUT
|
||||||
echo "## UpYun artifact download duration: ${duration}s" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
- name: Start UpYun upload timing
|
- name: Start upload timing
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
id: start-upyun-upload
|
id: start-upyun-upload
|
||||||
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT
|
||||||
@@ -368,6 +432,15 @@ jobs:
|
|||||||
chmod +x scripts/deploy_upyun.sh
|
chmod +x scripts/deploy_upyun.sh
|
||||||
./scripts/deploy_upyun.sh ./public / 20
|
./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: Save deploy hash
|
- name: Save deploy hash
|
||||||
if: steps.check.outputs.deployed == 'true'
|
if: steps.check.outputs.deployed == 'true'
|
||||||
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
|
run: echo "${{ needs.build.outputs.build_hash }}" > .last_deploy_hash
|
||||||
@@ -388,14 +461,21 @@ 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
|
||||||
upload_start_time=${{ steps.start-upyun-upload.outputs.start_time }}
|
download_duration=${{ steps.end-upyun-download.outputs.duration }}
|
||||||
upload_duration=$((end_time - upload_start_time))
|
upload_duration=${{ steps.end-upyun-upload.outputs.duration }}
|
||||||
|
echo "download_duration=${download_duration}" >> $GITHUB_OUTPUT
|
||||||
echo "upload_duration=${upload_duration}" >> $GITHUB_OUTPUT
|
echo "upload_duration=${upload_duration}" >> $GITHUB_OUTPUT
|
||||||
echo "## Deploy UpYun total duration: ${total_duration}s" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "## UpYun upload duration: ${upload_duration}s" >> $GITHUB_STEP_SUMMARY
|
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 "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY
|
||||||
else
|
else
|
||||||
echo "## UpYun 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
echo "## UpYun 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "总耗时: ${total_duration}s" >> $GITHUB_STEP_SUMMARY
|
echo "总耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -451,12 +531,7 @@ jobs:
|
|||||||
CDN_URL_LIST: ${{ secrets.CDN_URL_LIST }}
|
CDN_URL_LIST: ${{ secrets.CDN_URL_LIST }}
|
||||||
run: node scripts/refresh_cdn.js
|
run: node scripts/refresh_cdn.js
|
||||||
|
|
||||||
- name: Generate Notification Report
|
- name: Send Telegram notification with detailed timing
|
||||||
if: steps.deploy-status.outputs.any_deployed == 'true'
|
|
||||||
continue-on-error: true
|
|
||||||
run: node scripts/generate_notification_report.js
|
|
||||||
|
|
||||||
- name: Send Telegram notification
|
|
||||||
env:
|
env:
|
||||||
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
TELEGRAM_BOT_TOKEN: ${{ secrets.TELEGRAM_BOT_TOKEN }}
|
||||||
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
TELEGRAM_CHAT_ID: ${{ secrets.TELEGRAM_CHAT_ID }}
|
||||||
@@ -466,10 +541,31 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EDGEONE_STATUS="${{ needs.deploy-edgeone.outputs.deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
PRECHECK_DUR="${{ needs.pre-check.outputs.duration }}"
|
||||||
UPYUN_STATUS="${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
BUILD_DUR="${{ needs.build.outputs.duration }}"
|
||||||
CDN_STATUS="${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
EDGEONE_DUR="${{ needs.deploy-edgeone.outputs.duration }}"
|
||||||
|
EDGEONE_DEPLOYED="${{ needs.deploy-edgeone.outputs.deployed }}"
|
||||||
|
UPYUN_DUR="${{ needs.deploy-upyun.outputs.duration }}"
|
||||||
|
UPYUN_DEPLOYED="${{ needs.deploy-upyun.outputs.deployed }}"
|
||||||
|
FILE_COUNT="${{ needs.build.outputs.file_count }}"
|
||||||
|
TOTAL_SIZE="${{ needs.build.outputs.total_size }}"
|
||||||
|
|
||||||
|
if [ "$EDGEONE_DEPLOYED" = "true" ]; then
|
||||||
|
EDGEONE_DOWNLOAD="${{ needs.deploy-edgeone.outputs.download_duration }}"
|
||||||
|
EDGEONE_UPLOAD="${{ needs.deploy-edgeone.outputs.upload_duration }}"
|
||||||
|
EDGEONE_DETAIL="\n - 下载: ${EDGEONE_DOWNLOAD}s\n - 上传: ${EDGEONE_UPLOAD}s"
|
||||||
|
else
|
||||||
|
EDGEONE_DETAIL=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$UPYUN_DEPLOYED" = "true" ]; then
|
||||||
|
UPYUN_DOWNLOAD="${{ needs.deploy-upyun.outputs.download_duration }}"
|
||||||
|
UPYUN_UPLOAD="${{ needs.deploy-upyun.outputs.upload_duration }}"
|
||||||
|
UPYUN_DETAIL="\n - 下载: ${UPYUN_DOWNLOAD}s\n - 上传: ${UPYUN_UPLOAD}s"
|
||||||
|
else
|
||||||
|
UPYUN_DETAIL=""
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then
|
if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then
|
||||||
TITLE="✅ **部署成功**"
|
TITLE="✅ **部署成功**"
|
||||||
else
|
else
|
||||||
@@ -478,22 +574,29 @@ jobs:
|
|||||||
|
|
||||||
MESSAGE="${TITLE}
|
MESSAGE="${TITLE}
|
||||||
|
|
||||||
📦 项目: ${{ github.repository }}
|
📦 项目: ${{ github.repository }}
|
||||||
🌿 分支: ${{ github.ref_name }}
|
🌿 分支: ${{ github.ref_name }}
|
||||||
🔗 Commit: ${{ github.sha }}
|
🔗 Commit: ${{ github.sha }}
|
||||||
🕐 时间: $(date +'%Y-%m-%d %H:%M:%S')
|
🕐 时间: $(date +'%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
📊 部署目标:
|
📊 构建统计:
|
||||||
- EdgeOne Pages ${EDGEONE_STATUS}
|
- 文件总数: ${FILE_COUNT}
|
||||||
- UpYun ${UPYUN_STATUS}
|
- 总大小: ${TOTAL_SIZE}
|
||||||
- CDN 刷新 ${CDN_STATUS}"
|
|
||||||
|
⏱️ 耗时统计:
|
||||||
|
- Pre-check: ${PRECHECK_DUR}s
|
||||||
|
- Build: ${BUILD_DUR}s
|
||||||
|
- EdgeOne: ${EDGEONE_DUR}s${EDGEONE_DETAIL}
|
||||||
|
- UpYun: ${UPYUN_DUR}s${UPYUN_DETAIL}
|
||||||
|
|
||||||
|
🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
-d text="${MESSAGE}" \
|
-d text="${MESSAGE}" \
|
||||||
-d parse_mode="Markdown"
|
-d parse_mode="Markdown"
|
||||||
|
|
||||||
- name: Send Feishu notification
|
- name: Send Feishu notification with detailed timing
|
||||||
env:
|
env:
|
||||||
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
FEISHU_WEBHOOK_URL: ${{ secrets.FEISHU_WEBHOOK_URL }}
|
||||||
run: |
|
run: |
|
||||||
@@ -502,10 +605,31 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
EDGEONE_STATUS="${{ needs.deploy-edgeone.outputs.deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
PRECHECK_DUR="${{ needs.pre-check.outputs.duration }}"
|
||||||
UPYUN_STATUS="${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
BUILD_DUR="${{ needs.build.outputs.duration }}"
|
||||||
CDN_STATUS="${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅' || '⏭️ 跳过' }}"
|
EDGEONE_DUR="${{ needs.deploy-edgeone.outputs.duration }}"
|
||||||
|
EDGEONE_DEPLOYED="${{ needs.deploy-edgeone.outputs.deployed }}"
|
||||||
|
UPYUN_DUR="${{ needs.deploy-upyun.outputs.duration }}"
|
||||||
|
UPYUN_DEPLOYED="${{ needs.deploy-upyun.outputs.deployed }}"
|
||||||
|
FILE_COUNT="${{ needs.build.outputs.file_count }}"
|
||||||
|
TOTAL_SIZE="${{ needs.build.outputs.total_size }}"
|
||||||
|
|
||||||
|
if [ "$EDGEONE_DEPLOYED" = "true" ]; then
|
||||||
|
EDGEONE_DOWNLOAD="${{ needs.deploy-edgeone.outputs.download_duration }}"
|
||||||
|
EDGEONE_UPLOAD="${{ needs.deploy-edgeone.outputs.upload_duration }}"
|
||||||
|
EDGEONE_DETAIL="\n - 下载: ${EDGEONE_DOWNLOAD}s\n - 上传: ${EDGEONE_UPLOAD}s"
|
||||||
|
else
|
||||||
|
EDGEONE_DETAIL=""
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$UPYUN_DEPLOYED" = "true" ]; then
|
||||||
|
UPYUN_DOWNLOAD="${{ needs.deploy-upyun.outputs.download_duration }}"
|
||||||
|
UPYUN_UPLOAD="${{ needs.deploy-upyun.outputs.upload_duration }}"
|
||||||
|
UPYUN_DETAIL="\n - 下载: ${UPYUN_DOWNLOAD}s\n - 上传: ${UPYUN_UPLOAD}s"
|
||||||
|
else
|
||||||
|
UPYUN_DETAIL=""
|
||||||
|
fi
|
||||||
|
|
||||||
if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then
|
if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then
|
||||||
TITLE="✅ **部署成功**"
|
TITLE="✅ **部署成功**"
|
||||||
else
|
else
|
||||||
@@ -513,21 +637,23 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
|
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
|
||||||
|
MESSAGE_TEXT="${TITLE}\n\n📦 项目: ${{ github.repository }}\n🌿 分支: ${{ github.ref_name }}\n🔗 Commit: ${{ github.sha }}\n🕐 时间: ${CURRENT_TIME}\n\n📊 构建统计:\n- 文件总数: ${FILE_COUNT}\n- 总大小: ${TOTAL_SIZE}\n\n⏱️ 耗时统计:\n- Pre-check: ${PRECHECK_DUR}s\n- Build: ${BUILD_DUR}s\n- EdgeOne: ${EDGEONE_DUR}s${EDGEONE_DETAIL}\n- UpYun: ${UPYUN_DUR}s${UPYUN_DETAIL}\n\n🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|
||||||
curl -s -X POST "${FEISHU_WEBHOOK_URL}" \
|
curl -s -X POST "${FEISHU_WEBHOOK_URL}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d '{
|
-d "{
|
||||||
"msg_type": "text",
|
\"msg_type\": \"text\",
|
||||||
"content": {
|
\"content\": {
|
||||||
"text": "'"${TITLE}"'\n\n📦 项目: ${{ github.repository }}\n🌿 分支: ${{ github.ref_name }}\n🔗 Commit: ${{ github.sha }}\n🕐 时间: '"${CURRENT_TIME}"'\n\n📊 部署目标:\n- EdgeOne Pages '"${EDGEONE_STATUS}"'\n- UpYun '"${UPYUN_STATUS}"'\n- CDN 刷新 '"${CDN_STATUS}"'"
|
\"text\": \"${MESSAGE_TEXT}\"
|
||||||
}
|
}
|
||||||
}'
|
}"
|
||||||
|
|
||||||
- name: Get current date (CN)
|
- name: Get current date (CN)
|
||||||
if: steps.deploy-status.outputs.any_deployed == 'true'
|
if: steps.deploy-status.outputs.any_deployed == 'true'
|
||||||
id: date
|
id: date
|
||||||
run: echo "date=$(date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT
|
run: echo "date=$(date +'%Y-%m-%d %H:%M:%S')" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Send deployment notification
|
- name: Send email notification with detailed timing
|
||||||
if: steps.deploy-status.outputs.any_deployed == 'true'
|
if: steps.deploy-status.outputs.any_deployed == 'true'
|
||||||
uses: dawidd6/action-send-mail@v3
|
uses: dawidd6/action-send-mail@v3
|
||||||
with:
|
with:
|
||||||
@@ -536,11 +662,49 @@ jobs:
|
|||||||
secure: true
|
secure: true
|
||||||
username: ${{ secrets.MAIL_USERNAME }}
|
username: ${{ secrets.MAIL_USERNAME }}
|
||||||
password: ${{ secrets.MAIL_PASSWORD }}
|
password: ${{ secrets.MAIL_PASSWORD }}
|
||||||
subject: 部署报告 - ${{ steps.date.outputs.date }}
|
subject: "[部署报告] ${{ github.repository }} - ${{ steps.date.outputs.date }}"
|
||||||
to: ${{ secrets.MAIL_USERNAME }}
|
to: ${{ secrets.MAIL_USERNAME }}
|
||||||
from: GitHub Actions <${{ github.event_name }}>
|
from: GitHub Actions <${{ github.event_name }}>
|
||||||
body: |
|
body: |
|
||||||
${{ env.DEPLOY_REPORT }}
|
===========================================
|
||||||
|
部署报告
|
||||||
|
===========================================
|
||||||
|
项目: ${{ github.repository }}
|
||||||
|
分支: ${{ github.ref_name }}
|
||||||
|
Commit: ${{ github.sha }}
|
||||||
|
时间: ${{ steps.date.outputs.date }}
|
||||||
|
触发方式: ${{ github.event_name }}
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
构建统计
|
||||||
|
===========================================
|
||||||
|
文件总数: ${{ needs.build.outputs.file_count }}
|
||||||
|
总大小: ${{ needs.build.outputs.total_size }}
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
耗时统计
|
||||||
|
===========================================
|
||||||
|
Pre-check: ${{ needs.pre-check.outputs.duration }}s
|
||||||
|
Build: ${{ needs.build.outputs.duration }}s
|
||||||
|
|
||||||
|
EdgeOne Pages: ${{ needs.deploy-edgeone.outputs.duration }}s
|
||||||
|
- 下载 Artifact: ${{ needs.deploy-edgeone.outputs.download_duration }}s
|
||||||
|
- 上传部署: ${{ needs.deploy-edgeone.outputs.upload_duration }}s
|
||||||
|
|
||||||
|
UpYun: ${{ needs.deploy-upyun.outputs.duration }}s
|
||||||
|
- 下载 Artifact: ${{ needs.deploy-upyun.outputs.download_duration }}s
|
||||||
|
- 上传部署: ${{ needs.deploy-upyun.outputs.upload_duration }}s
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
部署状态
|
||||||
|
===========================================
|
||||||
|
EdgeOne Pages: ${{ needs.deploy-edgeone.outputs.deployed == 'true' && '已部署' || '跳过(无变化)' }}
|
||||||
|
UpYun: ${{ needs.deploy-upyun.outputs.deployed == 'true' && '已部署' || '跳过(无变化)' }}
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
查看详情
|
||||||
|
===========================================
|
||||||
|
https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
||||||
|
|
||||||
- name: Generate timing summary
|
- name: Generate timing summary
|
||||||
id: timing-summary
|
id: timing-summary
|
||||||
@@ -549,32 +713,58 @@ jobs:
|
|||||||
start_time=${{ steps.start-finalize.outputs.start_time }}
|
start_time=${{ steps.start-finalize.outputs.start_time }}
|
||||||
finalize_duration=$((end_time - start_time))
|
finalize_duration=$((end_time - start_time))
|
||||||
|
|
||||||
|
PRECHECK_DUR="${{ needs.pre-check.outputs.duration }}"
|
||||||
|
BUILD_DUR="${{ needs.build.outputs.duration }}"
|
||||||
|
EDGEONE_DUR="${{ needs.deploy-edgeone.outputs.duration }}"
|
||||||
EDGEONE_DEPLOYED="${{ needs.deploy-edgeone.outputs.deployed }}"
|
EDGEONE_DEPLOYED="${{ needs.deploy-edgeone.outputs.deployed }}"
|
||||||
|
UPYUN_DUR="${{ needs.deploy-upyun.outputs.duration }}"
|
||||||
UPYUN_DEPLOYED="${{ needs.deploy-upyun.outputs.deployed }}"
|
UPYUN_DEPLOYED="${{ needs.deploy-upyun.outputs.deployed }}"
|
||||||
|
|
||||||
if [ "$EDGEONE_DEPLOYED" = "true" ]; then
|
if [ "$EDGEONE_DEPLOYED" = "true" ]; then
|
||||||
EDGEONE_DISPLAY="✅ 已部署"
|
EDGEONE_DOWNLOAD="${{ needs.deploy-edgeone.outputs.download_duration }}"
|
||||||
|
EDGEONE_UPLOAD="${{ needs.deploy-edgeone.outputs.upload_duration }}"
|
||||||
else
|
else
|
||||||
EDGEONE_DISPLAY="⏭️ 跳过(无变化)"
|
EDGEONE_DOWNLOAD="0"
|
||||||
fi
|
EDGEONE_UPLOAD="0"
|
||||||
|
|
||||||
if [ "$UPYUN_DEPLOYED" = "true" ]; then
|
|
||||||
UPYUN_DISPLAY="✅ 已部署"
|
|
||||||
else
|
|
||||||
UPYUN_DISPLAY="⏭️ 跳过(无变化)"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "## ⏱️ 部署耗时统计" >> $GITHUB_STEP_SUMMARY
|
if [ "$UPYUN_DEPLOYED" = "true" ]; then
|
||||||
|
UPYUN_DOWNLOAD="${{ needs.deploy-upyun.outputs.download_duration }}"
|
||||||
|
UPYUN_UPLOAD="${{ needs.deploy-upyun.outputs.upload_duration }}"
|
||||||
|
else
|
||||||
|
UPYUN_DOWNLOAD="0"
|
||||||
|
UPYUN_UPLOAD="0"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "## 📊 部署报告" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| 阶段 | 状态 |" >> $GITHUB_STEP_SUMMARY
|
echo "### 基本信息" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **项目**: ${{ github.repository }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **分支**: ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **触发方式**: ${{ github.event_name }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
echo "### ⏱️ 耗时统计" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| 阶段 | 总耗时 | 下载 | 上传 |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "|------|--------|------|------|" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| Pre-check | ${PRECHECK_DUR}s | - | - |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| Build | ${BUILD_DUR}s | - | - |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| EdgeOne | ${EDGEONE_DUR}s | ${EDGEONE_DOWNLOAD}s | ${EDGEONE_UPLOAD}s |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| UpYun | ${UPYUN_DUR}s | ${UPYUN_DOWNLOAD}s | ${UPYUN_UPLOAD}s |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| Finalize | ${finalize_duration}s | - | - |" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
|
echo "### 🚀 部署状态" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "" >> $GITHUB_STEP_SUMMARY
|
||||||
|
echo "| 目标 | 状态 |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "|------|------|" >> $GITHUB_STEP_SUMMARY
|
echo "|------|------|" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Pre-check | ${{ needs.pre-check.result == 'success' && '✅ 成功' || needs.pre-check.result == 'skipped' && '⏭️ 跳过' || '❌ 失败' }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| EdgeOne Pages | ${{ needs.deploy-edgeone.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Build | ${{ needs.build.result == 'success' && '✅ 成功' || '❌ 失败' }} |" >> $GITHUB_STEP_SUMMARY
|
echo "| UpYun | ${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Deploy EdgeOne | ${EDGEONE_DISPLAY} |" >> $GITHUB_STEP_SUMMARY
|
echo "| CDN 刷新 | ${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅ 已刷新' || '⏭️ 跳过' }} |" >> $GITHUB_STEP_SUMMARY
|
||||||
echo "| Deploy UpYun | ${UPYUN_DISPLAY} |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Finalize | ✅ 成功 (${finalize_duration}秒) |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "**Finalize 阶段耗时:** ${finalize_duration}秒" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
# Job 6: Failure Notification (失败通知)
|
# Job 6: Failure Notification (失败通知)
|
||||||
@@ -598,15 +788,23 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
FAILURES=""
|
||||||
|
if [ "${{ needs.pre-check.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Pre-check"; fi
|
||||||
|
if [ "${{ needs.build.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Build"; fi
|
||||||
|
if [ "${{ needs.deploy-edgeone.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Deploy EdgeOne"; fi
|
||||||
|
if [ "${{ needs.deploy-upyun.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Deploy UpYun"; fi
|
||||||
|
if [ "${{ needs.finalize.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Finalize"; fi
|
||||||
|
|
||||||
MESSAGE="❌ **部署失败**
|
MESSAGE="❌ **部署失败**
|
||||||
|
|
||||||
📦 项目: ${{ github.repository }}
|
📦 项目: ${{ github.repository }}
|
||||||
🌿 分支: ${{ github.ref_name }}
|
🌿 分支: ${{ github.ref_name }}
|
||||||
🔗 Commit: ${{ github.sha }}
|
🔗 Commit: ${{ github.sha }}
|
||||||
🕐 时间: $(date +'%Y-%m-%d %H:%M:%S')
|
🕐 时间: $(date +'%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
📝 工作流: ${{ github.workflow }}
|
⚠️ 失败阶段:$FAILURES
|
||||||
🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
|
||||||
|
🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|
||||||
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
|
||||||
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
-d chat_id="${TELEGRAM_CHAT_ID}" \
|
||||||
@@ -622,12 +820,21 @@ jobs:
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
FAILURES=""
|
||||||
|
if [ "${{ needs.pre-check.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Pre-check"; fi
|
||||||
|
if [ "${{ needs.build.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Build"; fi
|
||||||
|
if [ "${{ needs.deploy-edgeone.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Deploy EdgeOne"; fi
|
||||||
|
if [ "${{ needs.deploy-upyun.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Deploy UpYun"; fi
|
||||||
|
if [ "${{ needs.finalize.result }}" = "failure" ]; then FAILURES="${FAILURES}\n- ❌ Finalize"; fi
|
||||||
|
|
||||||
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
|
CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S')
|
||||||
|
MESSAGE_TEXT="❌ **部署失败**\n\n📦 项目: ${{ github.repository }}\n🌿 分支: ${{ github.ref_name }}\n🔗 Commit: ${{ github.sha }}\n🕐 时间: ${CURRENT_TIME}\n\n⚠️ 失败阶段:${FAILURES}\n\n🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
||||||
|
|
||||||
curl -s -X POST "${FEISHU_WEBHOOK_URL}" \
|
curl -s -X POST "${FEISHU_WEBHOOK_URL}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
-d '{
|
-d "{
|
||||||
"msg_type": "text",
|
\"msg_type\": \"text\",
|
||||||
"content": {
|
\"content\": {
|
||||||
"text": "❌ **部署失败**\n\n📦 项目: ${{ github.repository }}\n🌿 分支: ${{ github.ref_name }}\n🔗 Commit: ${{ github.sha }}\n🕐 时间: '"${CURRENT_TIME}"'\n\n📝 工作流: ${{ github.workflow }}\n🔍 查看详情: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"
|
\"text\": \"${MESSAGE_TEXT}\"
|
||||||
}
|
}
|
||||||
}'
|
}"
|
||||||
Reference in new issue
Block a user