From a01312d1044f990ef80ae8c3df5b4d49aeb24b0f Mon Sep 17 00:00:00 2001 From: Vaica <94612053+zqlit@users.noreply.github.com> Date: Thu, 25 Jun 2026 13:32:44 +0800 Subject: [PATCH] 13.32 --- .github/workflows/deploy.yml | 20 +++++--- scripts/deploy_upyun.sh | 99 ++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 scripts/deploy_upyun.sh diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 897c9efd..74040bbb 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -516,15 +516,21 @@ jobs: id: start-upyun-upload run: echo "start_time=$(date +%s)" >> $GITHUB_OUTPUT + - name: Checkout code (for scripts) + if: steps.check.outputs.deployed == 'true' + uses: actions/checkout@v4 + with: + fetch-depth: 1 + - name: Deploy to UpYun if: steps.check.outputs.deployed == 'true' - uses: her-cat/upyun-deployer@v1.0.4 - with: - bucket: ${{ secrets.UPYUN_BUCKET }} - operator: ${{ secrets.UPYUN_OPERATOR }} - password: ${{ secrets.UPYUN_PASSWORD }} - dir: 'public' - publish_dir: '/' + env: + UPYUN_SERVICE: ${{ secrets.UPYUN_BUCKET }} + UPYUN_OPERATOR: ${{ secrets.UPYUN_OPERATOR }} + UPYUN_PASSWORD: ${{ secrets.UPYUN_PASSWORD }} + run: | + chmod +x scripts/deploy_upyun.sh + ./scripts/deploy_upyun.sh ./public / 20 - name: Save deploy hash if: steps.check.outputs.deployed == 'true' diff --git a/scripts/deploy_upyun.sh b/scripts/deploy_upyun.sh new file mode 100644 index 00000000..c3c6d35d --- /dev/null +++ b/scripts/deploy_upyun.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# UpYun 部署脚本 - 使用 upx 官方工具 +# 功能:增量同步本地文件到 UpYun,自动删除远程多余文件 +# +# 用法: ./deploy_upyun.sh <本地目录> <远程目录> [线程数] +# 示例: ./deploy_upyun.sh ./public / 10 +# +# 环境变量: +# UPYUN_SERVICE - 服务名 (bucket) +# UPYUN_OPERATOR - 操作员 +# UPYUN_PASSWORD - 密码 + +set -e + +START_TIME=$(date +%s) + +# 参数 +LOCAL_DIR="${1:-./public}" +REMOTE_DIR="${2:-/}" +THREADS="${3:-10}" + +# 检查环境变量 +SERVICE_NAME="${UPYUN_SERVICE:-}" +OPERATOR="${UPYUN_OPERATOR:-}" +PASSWORD="${UPYUN_PASSWORD:-}" + +if [ -z "$SERVICE_NAME" ] || [ -z "$OPERATOR" ] || [ -z "$PASSWORD" ]; then + echo "❌ 错误:缺少必要的环境变量" + echo "需要设置:" + echo " UPYUN_SERVICE - 服务名 (bucket)" + echo " UPYUN_OPERATOR - 操作员" + echo " UPYUN_PASSWORD - 密码" + exit 1 +fi + +echo "🚀 UpYun 部署开始" +echo "==========================================" +echo "📦 服务名: $SERVICE_NAME" +echo "👤 操作员: $OPERATOR" +echo "📁 本地目录: $LOCAL_DIR" +echo "☁️ 远程目录: $REMOTE_DIR" +echo "🔢 线程数: $THREADS" +echo "==========================================" + +# 下载 upx +UPX_VERSION="0.4.9" +UPX_URL="https://collection.b0.upaiyun.com/softwares/upx/upx_${UPX_VERSION}_linux_amd64.tar.gz" +UPX_BIN="/tmp/upx" + +if ! command -v upx &> /dev/null; then + echo "" + echo "📥 下载 upx v${UPX_VERSION}..." + curl -sL "$UPX_URL" -o /tmp/upx.tar.gz + + if [ ! -f /tmp/upx.tar.gz ]; then + echo "❌ 下载失败" + exit 1 + fi + + tar -xzf /tmp/upx.tar.gz -C /tmp + chmod +x /tmp/upx + UPX_BIN="/tmp/upx" + + echo "✅ upx 安装完成" +else + UPX_BIN="upx" + echo "✅ upx 已安装: $(upx --version 2>/dev/null | head -1)" +fi + +echo "" +echo "🔄 开始同步..." +echo "" + +# 使用 upx sync 进行增量同步 +# --delete: 删除远程端不存在的文件 +# --thread: 并发线程数 +# --overwrite: 覆盖已存在的文件 +# --skip: 跳过相同的文件(基于 MD5) + +$UPX_BIN sync "$LOCAL_DIR" "$REMOTE_DIR" \ + --delete \ + --thread "$THREADS" \ + --overwrite \ + --skip \ + --service "$SERVICE_NAME" \ + --operator "$OPERATOR" \ + --password "$PASSWORD" \ + --verbose + +END_TIME=$(date +%s) +DURATION=$((END_TIME - START_TIME)) +MINUTES=$((DURATION / 60)) +SECONDS=$((DURATION % 60)) + +echo "" +echo "==========================================" +echo "✅ UpYun 部署完成!" +echo "⏱️ 总耗时: ${MINUTES}分${SECONDS}秒" +echo "=========================================="