name: Plugin Library CI on: push: branches: [master, main] workflow_dispatch: env: SERVER_HOST: ${{ vars.SERVER_HOST }} AuthToken: ${{ vars.AUTH_TOKEN }} jobs: publish: runs-on: dev container: image: node:18-bookworm strategy: fail-fast: false max-parallel: 4 matrix: module: - 00.StaryEvo - 00.StaryEvoTools - 00.BuildOriginality - 00.ARMazTools - 01.HybridCLR - 02.InformationSave - 03.YooAsset - 04.AudioCore - 05.TableTextConversion - 06.UIFarme - 07.RKTools - 08.UniTask - 09.CodeChecker - 10.StoryEditor - 10.XNode - 11.PointCloudTools steps: - name: Checkout uses: http://106.52.62.106:3000/unity-registry/checkout@v4 with: fetch-depth: 1 single-branch: true sparse-checkout: Assets/${{ matrix.module }} sparse-checkout-cone-mode: false - name: Setup Node.js run: | ln -sf /srv/18-alpine/bin/node /usr/bin/node 2>/dev/null || true ln -sf /srv/18-alpine/bin/npm /usr/bin/npm 2>/dev/null || true node -v # 修正:所有 shell 命令必须缩进在 run: | 下面 - name: Publish ${{ matrix.module }} working-directory: Assets/${{ matrix.module }} run: | echo "📦 开始处理 ${{ matrix.module }}" # 获取当前版本号 CURRENT_VERSION=$(node -p "require('./package.json').version") PACKAGE_NAME=$(node -p "require('./package.json').name") REGISTRY_URL="http://${SERVER_HOST}/npm" echo "当前版本: $PACKAGE_NAME@$CURRENT_VERSION" echo "Registry: $REGISTRY_URL" # 配置 npm npm config set registry "$REGISTRY_URL" npm config set "//${SERVER_HOST}/:_authToken" "${AuthToken}" # 关键:先检查远程是否已存在该版本 echo "🔍 检查远程版本..." if npm view "$PACKAGE_NAME@$CURRENT_VERSION" --registry="$REGISTRY_URL" version >/dev/null 2>&1; then echo "⚠️ 版本 $CURRENT_VERSION 已存在,跳过发布" echo "💡 提示:如需更新,请修改 package.json 中的 version 字段" exit 0 # 正常退出,不算失败 fi # 版本不存在,执行发布 echo "🚀 版本 $CURRENT_VERSION 不存在,开始发布..." if npm publish; then echo "✅ $PACKAGE_NAME@$CURRENT_VERSION 发布成功" else echo "❌ 发布失败(非版本冲突错误)" exit 1 # 真正的失败,终止 CI fi - name: Complete if: always() run: echo "====== ${{ matrix.module }} 发布完成 ========="