From 80ea1ff5b326a5c4041fecd9408cf966a514096e Mon Sep 17 00:00:00 2001 From: zqlit Date: Thu, 1 Oct 2026 16:47:05 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=E5=88=A0=E9=99=A4=E7=A9=BA=E5=A3=B3?= =?UTF-8?q?=20deploy-upyun=20job=EF=BC=8CUpYun=20=E7=9B=B4=E4=BC=A0?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E5=A6=82=E5=AE=9E=E4=B8=8A=E6=8A=A5=E4=B8=89?= =?UTF-8?q?=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit deploy-upyun 是零上传动作的空壳 job,却无条件打印「UpYun 已同步最新内容」,其输出被 Telegram / 飞书 / 邮件通知当成 UpYun 部署成功的依据;真正的上传步骤标了 continue-on-error,失败也不影响 job 颜色。三层叠加,导致 7/25 起国内线路停更两个多月而通知始终显示成功。 改动:删除 deploy-upyun(finalize / notify-failure 的 needs 同步清理);Upload to UpYun 在退出时写 GITHUB_OUTPUT,如实上报 success / failure / skipped 三态与真实耗时(不用 steps.outcome,只依赖最通用的 output 传递);通知与 Step Summary 改为展示三态真实结果,移除「文件已在 Build 阶段同步」这类未经验证的说法。 又拍云直传失败仍不阻断流水线 —— 国内线路由腾讯云广州的 1Panel 计划任务「又拍云同步(国内中转)」每分钟兜底增量推送。 --- .github/workflows/deploy.yml | 172 ++++++++++++++--------------------- 1 file changed, 70 insertions(+), 102 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index afaf9579..2c8e117c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -126,8 +126,13 @@ jobs: duration: ${{ steps.end-build.outputs.duration }} file_count: ${{ steps.stats.outputs.file_count }} total_size: ${{ steps.stats.outputs.total_size }} - skipped: ${{ steps.upload.outputs.skipped || steps.set-skipped.outputs.skipped }} need_upload: ${{ steps.check-upload.outputs.need_upload }} + # Upload to UpYun 的真实三态:success / failure / skipped(未执行)。 + # 该步骤标了 continue-on-error,conclusion 恒为 success,不能用来判断成败。 + # 这里刻意不用 steps..outcome,而是让步骤自己在退出时写 GITHUB_OUTPUT, + # 只依赖最通用的 output 传递机制,GitHub / Gitea 两边都稳。 + upyun_status: ${{ steps.upload.outputs.upyun_status || 'skipped' }} + upyun_duration: ${{ steps.upload.outputs.duration }} needs: pre-check if: needs.pre-check.outputs.can_deploy == 'true' @@ -291,9 +296,25 @@ jobs: UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }} UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }} id: upload + # 直传失败不阻断整条流水线 —— 国内线路已由腾讯云广州的中转机兜底 + # (1Panel 计划任务「又拍云同步(国内中转)」每分钟比对 COS 上的 build hash, + # 有变化才增量推送)。但失败必须被如实上报,绝不能再伪装成成功。 continue-on-error: true run: | echo "📤 上传构建产物到 UpYun..." + START_TS=$(date +%s) + # 无论成功、失败还是中途退出,都在退出时如实上报结果与耗时。 + # 这是"不再假绿"的核心:过去无论传没传上去,通知都显示成功。 + on_exit() { + rc=$? + if [ "$rc" -eq 0 ]; then + echo "upyun_status=success" >> $GITHUB_OUTPUT + else + echo "upyun_status=failure" >> $GITHUB_OUTPUT + fi + echo "duration=$(($(date +%s) - START_TS))" >> $GITHUB_OUTPUT + } + trap on_exit EXIT UPX_VERSION="0.4.9" UPX_BIN="/tmp/upyun-upx" @@ -340,12 +361,6 @@ jobs: timeout 480 "$UPX_BIN" sync public/ / -w 10 --delete --strong timeout 30 "$UPX_BIN" put public/.build_hash /__build_hash echo "✅ UpYun 上传完成" - echo "skipped=false" >> $GITHUB_OUTPUT - - - name: Set skipped status - if: steps.check-upload.outputs.need_upload == 'false' - id: set-skipped - run: echo "skipped=true" >> $GITHUB_OUTPUT - name: Push Image Optimizations continue-on-error: true @@ -504,58 +519,12 @@ jobs: fi # ============================================================ - # Job 4: Deploy to UpYun (并行) + # 注意:这里原先有一个名为 deploy-upyun 的 job —— 它是纯空壳: + # 零上传动作,却无条件打印「UpYun 已同步最新内容」,且它的输出被 + # Telegram / 飞书 / 邮件通知当成"UpYun 部署成功"的依据。 + # 因它持续掩盖真实故障(7/25 起国内线路停更两个多月),已于 2026-10-01 删除。 + # 又拍云的真实状态现在来自 build job 的 upyun_status 输出。 # ============================================================ - deploy-upyun: - runs-on: ubuntu-latest - timeout-minutes: 5 - permissions: - contents: read - needs: build - outputs: - deployed: ${{ steps.check.outputs.deployed }} - duration: ${{ steps.end-upyun.outputs.duration }} - - steps: - - name: Start timing - id: start-upyun - run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT - - - name: Check if deployment is needed - id: check - run: | - CURRENT_HASH="${{ needs.build.outputs.build_hash }}" - LAST_HASH="${{ needs.build.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: End timing - id: end-upyun - run: | - end_time=$(date +%s) - total_start_time=${{ steps.start-upyun.outputs.start_time }} - total_duration=$((end_time - total_start_time)) - echo "duration=${total_duration}" >> $GITHUB_OUTPUT - - if [ "${{ steps.check.outputs.deployed }}" = "true" ]; then - echo "## ⏱️ Deploy UpYun 耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY - echo "" >> $GITHUB_STEP_SUMMARY - echo "### 📊 部署统计" >> $GITHUB_STEP_SUMMARY - echo "- **文件总数**: ${{ needs.build.outputs.file_count }}" >> $GITHUB_STEP_SUMMARY - echo "- **总大小**: ${{ needs.build.outputs.total_size }}" >> $GITHUB_STEP_SUMMARY - else - echo "## UpYun 部署已跳过(构建产物无变化)" >> $GITHUB_STEP_SUMMARY - echo "总耗时: ${total_duration}秒" >> $GITHUB_STEP_SUMMARY - fi # ============================================================ # Job 5: CDN Refresh & Notifications (after all deployments) @@ -565,8 +534,8 @@ jobs: timeout-minutes: 5 permissions: contents: write - needs: [pre-check, build, deploy-edgeone, deploy-upyun] - if: always() && needs.build.result == 'success' && needs.deploy-edgeone.result == 'success' && needs.deploy-upyun.result == 'success' + needs: [pre-check, build, deploy-edgeone] + if: always() && needs.build.result == 'success' && needs.deploy-edgeone.result == 'success' steps: - name: Start timing @@ -584,12 +553,12 @@ jobs: id: deploy-status run: | EDGEONE_DEPLOYED="${{ needs.deploy-edgeone.outputs.deployed }}" - UPYUN_DEPLOYED="${{ needs.deploy-upyun.outputs.deployed }}" + UPYUN_STATUS="${{ needs.build.outputs.upyun_status }}" echo "EdgeOne deployed: $EDGEONE_DEPLOYED" - echo "UpYun deployed: $UPYUN_DEPLOYED" + echo "UpYun status: $UPYUN_STATUS" - if [ "$EDGEONE_DEPLOYED" = "true" ] || [ "$UPYUN_DEPLOYED" = "true" ]; then + if [ "$EDGEONE_DEPLOYED" = "true" ] || [ "$UPYUN_STATUS" = "success" ]; then echo "any_deployed=true" >> $GITHUB_OUTPUT else echo "any_deployed=false" >> $GITHUB_OUTPUT @@ -684,8 +653,8 @@ jobs: BUILD_DUR="${{ needs.build.outputs.duration }}" 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 }}" + UPYUN_DUR="${{ needs.build.outputs.upyun_duration }}" + UPYUN_STATUS_RAW="${{ needs.build.outputs.upyun_status }}" FILE_COUNT="${{ needs.build.outputs.file_count }}" TOTAL_SIZE="${{ needs.build.outputs.total_size }}" @@ -696,10 +665,14 @@ jobs: EDGEONE_DETAIL=$(printf "\n 📥 下载: %ss\n 📤 上传: %ss" "$EDGEONE_DOWNLOAD" "$EDGEONE_UPLOAD") fi - UPYUN_DETAIL="" - if [ "$UPYUN_DEPLOYED" = "true" ]; then - UPYUN_DETAIL=$(printf "\n (文件已在 Build 阶段同步)") - fi + # 三态映射:直传结果如实呈现,不再有"文件已在 Build 阶段同步"这种没验证过的说辞 + case "$UPYUN_STATUS_RAW" in + success) UPYUN_TEXT="✅ 已直传";; + failure) UPYUN_TEXT="❌ 直传失败(国内中转机兜底)";; + skipped) UPYUN_TEXT="⏭️ 跳过(无变化)";; + *) UPYUN_TEXT="❔ 未执行";; + esac + if [ -n "$UPYUN_DUR" ]; then UPYUN_DUR_TEXT="${UPYUN_DUR}s"; else UPYUN_DUR_TEXT="—"; fi if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then STATUS_ICON="🎉" @@ -710,7 +683,6 @@ jobs: fi EDGEONE_STATUS=$([ "$EDGEONE_DEPLOYED" = "true" ] && echo "✅ 已部署" || echo "⏭️ 跳过") - UPYUN_STATUS=$([ "$UPYUN_DEPLOYED" = "true" ] && echo "✅ 已部署" || echo "⏭️ 跳过") CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S') @@ -732,12 +704,12 @@ jobs: MESSAGE="$MESSAGE""🔍 Pre-check: ${PRECHECK_DUR}s"$'\n' MESSAGE="$MESSAGE""🏗️ Build: ${BUILD_DUR}s"$'\n' MESSAGE="$MESSAGE""🌐 EdgeOne: ${EDGEONE_DUR}s$EDGEONE_DETAIL"$'\n' - MESSAGE="$MESSAGE""☁️ UpYun: ${UPYUN_DUR}s$UPYUN_DETAIL"$'\n\n' + MESSAGE="$MESSAGE""☁️ UpYun 直传: ${UPYUN_DUR_TEXT}"$'\n\n' MESSAGE="$MESSAGE""━━━━━━━━━━━━━━━━━━━━━━"$'\n' MESSAGE="$MESSAGE""📌 *部署状态*"$'\n' MESSAGE="$MESSAGE""━━━━━━━━━━━━━━━━━━━━━━"$'\n' MESSAGE="$MESSAGE""🌐 EdgeOne Pages: $EDGEONE_STATUS"$'\n' - MESSAGE="$MESSAGE""☁️ UpYun: $UPYUN_STATUS"$'\n\n' + MESSAGE="$MESSAGE""☁️ UpYun: $UPYUN_TEXT"$'\n\n' if [ "${{ github.server_url }}" = "https://github.com" ]; then RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" else @@ -764,8 +736,8 @@ jobs: BUILD_DUR="${{ needs.build.outputs.duration }}" 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 }}" + UPYUN_DUR="${{ needs.build.outputs.upyun_duration }}" + UPYUN_STATUS_RAW="${{ needs.build.outputs.upyun_status }}" FILE_COUNT="${{ needs.build.outputs.file_count }}" TOTAL_SIZE="${{ needs.build.outputs.total_size }}" @@ -776,10 +748,14 @@ jobs: EDGEONE_DETAIL=$(printf "\n 📥 下载: %ss\n 📤 上传: %ss" "$EDGEONE_DOWNLOAD" "$EDGEONE_UPLOAD") fi - UPYUN_DETAIL="" - if [ "$UPYUN_DEPLOYED" = "true" ]; then - UPYUN_DETAIL=$(printf "\n (文件已在 Build 阶段同步)") - fi + # 三态映射:直传结果如实呈现,不再有"文件已在 Build 阶段同步"这种没验证过的说辞 + case "$UPYUN_STATUS_RAW" in + success) UPYUN_TEXT="✅ 已直传";; + failure) UPYUN_TEXT="❌ 直传失败(国内中转机兜底)";; + skipped) UPYUN_TEXT="⏭️ 跳过(无变化)";; + *) UPYUN_TEXT="❔ 未执行";; + esac + if [ -n "$UPYUN_DUR" ]; then UPYUN_DUR_TEXT="${UPYUN_DUR}s"; else UPYUN_DUR_TEXT="—"; fi if [ "${{ steps.deploy-status.outputs.any_deployed }}" = "true" ]; then STATUS_ICON="🎉" @@ -790,7 +766,6 @@ jobs: fi EDGEONE_STATUS=$([ "$EDGEONE_DEPLOYED" = "true" ] && echo "✅ 已部署" || echo "⏭️ 跳过") - UPYUN_STATUS=$([ "$UPYUN_DEPLOYED" = "true" ] && echo "✅ 已部署" || echo "⏭️ 跳过") CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S') @@ -812,12 +787,12 @@ jobs: MESSAGE_TEXT="$MESSAGE_TEXT""🔍 Pre-check: ${PRECHECK_DUR}s"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""🏗️ Build: ${BUILD_DUR}s"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""🌐 EdgeOne: ${EDGEONE_DUR}s$EDGEONE_DETAIL"$'\n' - MESSAGE_TEXT="$MESSAGE_TEXT""☁️ UpYun: ${UPYUN_DUR}s$UPYUN_DETAIL"$'\n\n' + MESSAGE_TEXT="$MESSAGE_TEXT""☁️ UpYun 直传: ${UPYUN_DUR_TEXT}"$'\n\n' MESSAGE_TEXT="$MESSAGE_TEXT""━━━━━━━━━━━━━━━━━━━━━━"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""📌 部署状态"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""━━━━━━━━━━━━━━━━━━━━━━"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""🌐 EdgeOne Pages: $EDGEONE_STATUS"$'\n' - MESSAGE_TEXT="$MESSAGE_TEXT""☁️ UpYun: $UPYUN_STATUS"$'\n\n' + MESSAGE_TEXT="$MESSAGE_TEXT""☁️ UpYun: $UPYUN_TEXT"$'\n\n' if [ "${{ github.server_url }}" = "https://github.com" ]; then RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" else @@ -877,12 +852,12 @@ jobs: 📥 下载 COS: ${{ needs.deploy-edgeone.outputs.download_duration }}s 📤 上传部署: ${{ needs.deploy-edgeone.outputs.upload_duration }}s - ☁️ UpYun: ${{ needs.deploy-upyun.outputs.duration }}s + ☁️ UpYun 直传: ${{ needs.build.outputs.upyun_status == 'success' && '✅ 成功' || (needs.build.outputs.upyun_status == 'skipped' && '⏭️ 跳过(无变化)' || '❌ 失败(国内中转机兜底)') }} 📌 部署状态 ────────────────────────────────── 🌐 EdgeOne Pages: ${{ needs.deploy-edgeone.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} - ☁️ UpYun: ${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} + ☁️ UpYun: ${{ needs.build.outputs.upyun_status == 'success' && '✅ 已直传' || (needs.build.outputs.upyun_status == 'skipped' && '⏭️ 跳过(无变化)' || '❌ 直传失败(中转机兜底)') }} 🔗 查看详情 ────────────────────────────────── @@ -901,8 +876,7 @@ jobs: BUILD_DUR="${{ needs.build.outputs.duration }}" 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 }}" + UPYUN_DUR="${{ needs.build.outputs.upyun_duration }}" if [ "$EDGEONE_DEPLOYED" = "true" ]; then EDGEONE_DOWNLOAD="${{ needs.deploy-edgeone.outputs.download_duration }}" @@ -912,13 +886,7 @@ jobs: EDGEONE_UPLOAD="0" fi - if [ "$UPYUN_DEPLOYED" = "true" ]; then - UPYUN_DOWNLOAD="0" - UPYUN_UPLOAD="0" - else - UPYUN_DOWNLOAD="0" - UPYUN_UPLOAD="0" - fi + UPYUN_DUR_CELL="${UPYUN_DUR}s"; [ -z "$UPYUN_DUR" ] && UPYUN_DUR_CELL="—" echo "## 📊 部署报告" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY @@ -938,7 +906,7 @@ jobs: 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 "| UpYun 直传 | ${UPYUN_DUR_CELL} | - | ${UPYUN_DUR_CELL} |" >> $GITHUB_STEP_SUMMARY echo "| Finalize | ${finalize_duration}s | - | - |" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY @@ -947,7 +915,7 @@ jobs: echo "| 目标 | 状态 |" >> $GITHUB_STEP_SUMMARY echo "|------|------|" >> $GITHUB_STEP_SUMMARY echo "| EdgeOne Pages | ${{ needs.deploy-edgeone.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY - echo "| UpYun | ${{ needs.deploy-upyun.outputs.deployed == 'true' && '✅ 已部署' || '⏭️ 跳过(无变化)' }} |" >> $GITHUB_STEP_SUMMARY + echo "| UpYun 直传 | ${{ needs.build.outputs.upyun_status == 'success' && '✅ 成功' || (needs.build.outputs.upyun_status == 'skipped' && '⏭️ 跳过(无变化)' || '❌ 失败(中转机兜底)') }} |" >> $GITHUB_STEP_SUMMARY echo "| CDN 刷新 | ${{ steps.deploy-status.outputs.any_deployed == 'true' && '✅ 已刷新' || '⏭️ 跳过' }} |" >> $GITHUB_STEP_SUMMARY # ============================================================ @@ -958,8 +926,8 @@ jobs: timeout-minutes: 3 permissions: contents: read - needs: [pre-check, build, deploy-edgeone, deploy-upyun, finalize] - if: always() && (needs.pre-check.result == 'failure' || needs.build.result == 'failure' || needs.deploy-edgeone.result == 'failure' || needs.deploy-upyun.result == 'failure' || needs.finalize.result == 'failure') + needs: [pre-check, build, deploy-edgeone, finalize] + if: always() && (needs.pre-check.result == 'failure' || needs.build.result == 'failure' || needs.deploy-edgeone.result == 'failure' || needs.finalize.result == 'failure') steps: - name: Send Telegram failure notification @@ -976,13 +944,13 @@ jobs: if [ "${{ needs.pre-check.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Pre-check" "$FAILURES"); fi if [ "${{ needs.build.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Build" "$FAILURES"); fi if [ "${{ needs.deploy-edgeone.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Deploy EdgeOne" "$FAILURES"); fi - if [ "${{ needs.deploy-upyun.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Deploy UpYun" "$FAILURES"); fi + if [ "${{ needs.build.outputs.upyun_status }}" = "failure" ]; then FAILURES=$(printf "%s\n ⚠️ UpYun 直传失败(不阻断,国内中转机兜底)" "$FAILURES"); fi if [ "${{ needs.finalize.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Finalize" "$FAILURES"); fi PRECHECK_STATUS=$([ "${{ needs.pre-check.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.pre-check.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) BUILD_STATUS=$([ "${{ needs.build.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.build.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) EDGEONE_STATUS=$([ "${{ needs.deploy-edgeone.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.deploy-edgeone.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) - UPYUN_STATUS=$([ "${{ needs.deploy-upyun.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.deploy-upyun.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) + UPYUN_STATUS=$([ "${{ needs.build.outputs.upyun_status }}" = "success" ] && echo "✅ 直传成功" || ([ "${{ needs.build.outputs.upyun_status }}" = "failure" ] && echo "❌ 直传失败(中转兜底)" || echo "⏭️ 跳过(无变化)")) FINALIZE_STATUS=$([ "${{ needs.finalize.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.finalize.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S') @@ -1003,7 +971,7 @@ jobs: MESSAGE="$MESSAGE""🔍 Pre-check: $PRECHECK_STATUS"$'\n' MESSAGE="$MESSAGE""🏗️ Build: $BUILD_STATUS"$'\n' MESSAGE="$MESSAGE""🌐 Deploy EdgeOne: $EDGEONE_STATUS"$'\n' - MESSAGE="$MESSAGE""☁️ Deploy UpYun: $UPYUN_STATUS"$'\n' + MESSAGE="$MESSAGE""☁️ UpYun 直传: $UPYUN_STATUS"$'\n' MESSAGE="$MESSAGE""📤 Finalize: $FINALIZE_STATUS"$'\n\n' if [ "${{ github.server_url }}" = "https://github.com" ]; then RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" @@ -1031,13 +999,13 @@ jobs: if [ "${{ needs.pre-check.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Pre-check" "$FAILURES"); fi if [ "${{ needs.build.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Build" "$FAILURES"); fi if [ "${{ needs.deploy-edgeone.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Deploy EdgeOne" "$FAILURES"); fi - if [ "${{ needs.deploy-upyun.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Deploy UpYun" "$FAILURES"); fi + if [ "${{ needs.build.outputs.upyun_status }}" = "failure" ]; then FAILURES=$(printf "%s\n ⚠️ UpYun 直传失败(不阻断,国内中转机兜底)" "$FAILURES"); fi if [ "${{ needs.finalize.result }}" = "failure" ]; then FAILURES=$(printf "%s\n 🔴 Finalize" "$FAILURES"); fi PRECHECK_STATUS=$([ "${{ needs.pre-check.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.pre-check.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) BUILD_STATUS=$([ "${{ needs.build.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.build.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) EDGEONE_STATUS=$([ "${{ needs.deploy-edgeone.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.deploy-edgeone.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) - UPYUN_STATUS=$([ "${{ needs.deploy-upyun.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.deploy-upyun.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) + UPYUN_STATUS=$([ "${{ needs.build.outputs.upyun_status }}" = "success" ] && echo "✅ 直传成功" || ([ "${{ needs.build.outputs.upyun_status }}" = "failure" ] && echo "❌ 直传失败(中转兜底)" || echo "⏭️ 跳过(无变化)")) FINALIZE_STATUS=$([ "${{ needs.finalize.result }}" = "success" ] && echo "✅ 成功" || ([ "${{ needs.finalize.result }}" = "failure" ] && echo "❌ 失败" || echo "⏭️ 跳过")) CURRENT_TIME=$(date +'%Y-%m-%d %H:%M:%S') @@ -1058,7 +1026,7 @@ jobs: MESSAGE_TEXT="$MESSAGE_TEXT""🔍 Pre-check: $PRECHECK_STATUS"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""🏗️ Build: $BUILD_STATUS"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""🌐 Deploy EdgeOne: $EDGEONE_STATUS"$'\n' - MESSAGE_TEXT="$MESSAGE_TEXT""☁️ Deploy UpYun: $UPYUN_STATUS"$'\n' + MESSAGE_TEXT="$MESSAGE_TEXT""☁️ UpYun 直传: $UPYUN_STATUS"$'\n' MESSAGE_TEXT="$MESSAGE_TEXT""📤 Finalize: $FINALIZE_STATUS"$'\n\n' if [ "${{ github.server_url }}" = "https://github.com" ]; then RUN_URL="https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}"