From 83d87ddeaf3684b32456c17ecc365fd91a49b74b Mon Sep 17 00:00:00 2001 From: zqlit Date: Wed, 30 Sep 2026 23:37:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(ci):=20=E5=8A=A0=E5=9B=BA=20UpYun=20?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=AD=A5=E9=AA=A4=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20upx=20=E4=B8=8B=E8=BD=BD=E6=8C=82=E6=AD=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 根因:collection.b0.upaiyun.com 实测 2/3 概率整站无响应, 而 curl -sL 无 --max-time,导致步骤永久挂起直到 job 15 分钟超时。 改动: - upx 主源改用 GitHub Releases(实测 0.5s 稳定),原 CDN 降为兜底 - curl 加 --connect-timeout/--max-time/--retry - upx login/put 加 timeout 兜底,sync 加 480s 上限 - 删除无效的 Cache upx 步骤(缓存路径 /tmp 随 job 容器销毁,永远命中不了) - 给 Upload to UpYun 加 timeout-minutes: 10 --- .github/workflows/deploy.yml | 51 ++++++++++++++++++++++-------------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 662c7b3f..4c2d8162 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -264,15 +264,9 @@ jobs: echo "📤 更新 hash 文件到腾讯云 COS..." coscmd upload public/.build_hash /__build_hash - - name: Cache upx - uses: actions/cache@v4 - id: upx-cache - with: - path: /tmp/upyun-upx - key: upx-0.4.9 - - name: Upload to UpYun if: steps.check-upload.outputs.need_upload == 'true' + timeout-minutes: 10 env: UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }} UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }} @@ -281,21 +275,40 @@ jobs: continue-on-error: true 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" - + + # 主源用 GitHub Releases(实测 0.5s 稳定), + # 官方 collection.b0.upaiyun.com 实测 2/3 概率整站无响应,仅作兜底 + UPX_URLS=( + "https://github.com/upyun/upx/releases/download/v${UPX_VERSION}/upx_${UPX_VERSION}_linux_amd64.tar.gz" + "https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz" + ) + 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" + ok=false + for U in "${UPX_URLS[@]}"; do + echo "⬇️ 下载 upx: $U" + if curl -fsSL --connect-timeout 10 --max-time 60 --retry 2 --retry-delay 2 \ + -o /tmp/upx.tar.gz "$U"; then + if tar -xzf /tmp/upx.tar.gz -C /tmp && [ -f /tmp/upx ]; then + mv /tmp/upx "$UPX_BIN" && chmod +x "$UPX_BIN" && ok=true + echo "✅ upx 就绪: $("$UPX_BIN" --version 2>&1 | head -1)" + break + fi + fi + echo "⚠️ 该源失败,尝试下一个..." + done + if [ "$ok" != "true" ]; then + echo "❌ 所有 upx 下载源均失败,跳过 UpYun 上传" + exit 1 + fi fi - + for i in 1 2 3 4 5; do echo "🔐 UpYun 登录 (尝试 $i/5)..." - if "$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD" 2>&1; then + if timeout 30 "$UPX_BIN" login "$UPYUN_SERVICE" "$UPYUN_OPERATOR" "$UPYUN_PASSWORD" 2>&1; then echo "✅ 登录成功" break else @@ -303,10 +316,10 @@ jobs: sleep 10 fi done - + echo "🔄 开始上传到 UpYun..." - "$UPX_BIN" sync public/ / -w 10 --delete --strong - "$UPX_BIN" put public/.build_hash /__build_hash + 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