diff --git a/.gitea/workflows/.gitlab-ci.yml b/.gitea/workflows/.gitlab-ci.yml index a0c9151..bc92e3f 100644 --- a/.gitea/workflows/.gitlab-ci.yml +++ b/.gitea/workflows/.gitlab-ci.yml @@ -3,22 +3,50 @@ name: Plugin Library CI on: push: branches: [master, main] - workflow_dispatch: # 支持手动触发 + workflow_dispatch: env: SERVER_HOST: ${{ vars.SERVER_HOST }} AuthToken: ${{ vars.AUTH_TOKEN }} + # 定义本地缓存路径:按仓库+Commit ID 组织,避免冲突 + CACHE_PATH: /srv/ci-cache/${{ github.repository }}/${{ github.sha }} jobs: - # 定义所有模块矩阵 + # ========== 阶段1:一次性准备代码包 ========== + prepare: + runs-on: dev + container: + image: alpine:latest + steps: + - name: Install Tools + run: apk add --no-cache git tar gzip + + - name: Checkout Repository + uses: http://106.52.62.106:3000/unity-registry/checkout@v4 + with: + fetch-depth: 1 + single-branch: true + + - name: Pack Code to /srv + run: | + # 创建目录结构(按仓库和 Commit 分层,防止冲突) + mkdir -p ${{ env.CACHE_PATH }} + + # 打包当前工作区到 /srv(排除 .git 节省空间) + tar czf ${{ env.CACHE_PATH }}/source.tar.gz --exclude='.git' -C ${{ github.workspace }} . + + echo "✅ 代码已打包到: ${{ env.CACHE_PATH }}/source.tar.gz" + ls -lh ${{ env.CACHE_PATH }}/source.tar.gz + + # ========== 阶段2:并行发布(直接从 /srv 加载) ========== publish: - runs-on: dev # 对应你的 GitLab runner tag + needs: prepare + runs-on: dev container: image: node:18-alpine - strategy: fail-fast: false - max-parallel: 2 # 关键:同时只跑 2 个模块,其余排队 + max-parallel: 2 matrix: module: - 00.StaryEvo @@ -39,15 +67,18 @@ jobs: - 11.PointCloudTools steps: - #- name: Install Git - # run: | - # apk add --no-cache git - # git --version # 验证 - - name: Checkout - uses: http://106.52.62.106:3000/unity-registry/checkout@v4 - with: - fetch-depth: 1 # 只拉取最新提交,不拉历史 - single-branch: true # 只拉取当前分支 + # 关键优化:从本地 /srv 解压,无需任何网络操作 + - name: Extract Source from /srv + run: | + echo "📦 从本地缓存解压: ${{ env.CACHE_PATH }}/source.tar.gz" + + # 直接解压到 Gitea 默认工作目录(通常是 /workspace) + mkdir -p ${{ github.workspace }} + tar xzf ${{ env.CACHE_PATH }}/source.tar.gz -C ${{ github.workspace }} + + # 验证文件存在(调试用,稳定后可删除) + ls -la ${{ github.workspace }}/Assets/${{ matrix.module }}/package.json + - name: Setup Node.js run: | ln -sf /srv/18-alpine/bin/node /usr/bin/node @@ -55,23 +86,38 @@ jobs: node -v - name: Publish ${{ matrix.module }} - working-directory: Assets/${{ matrix.module }} + working-directory: ${{ github.workspace }}/Assets/${{ matrix.module }} run: | - echo "开始发布 ${{ matrix.module }}" - - # 获取当前版本 + echo "🚀 开始发布 ${{ matrix.module }}" + CURRENT_VERSION=$(node -p "require('./package.json').version") echo "当前版本: $CURRENT_VERSION" - + # 配置 npm registry echo "registry=http://${SERVER_HOST}/npm" > .npmrc echo "//${SERVER_HOST}/:_authToken=${AuthToken}" >> .npmrc + + # 发布(失败不阻断其他任务) + npm publish || echo "⚠️ 发布失败,继续执行" + + echo "✅ ${{ matrix.module }} 处理完成" - # 发布 - npm publish || echo "发布失败,继续执行" - - echo "${{ matrix.module }} 构建完成" - - - name: Complete + - name: Job Complete if: always() - run: echo "====== ${{ matrix.module }} 发布完成 =========" + run: echo "======== ${{ matrix.module }} 发布 Job 结束 ========" + + # ========== 阶段3:清理(可选但推荐) ========== + cleanup: + needs: publish + runs-on: dev + if: always() # 即使发布失败也清理,防止磁盘堆积 + container: + image: alpine:latest + steps: + - name: Remove Local Cache + run: | + echo "🧹 清理临时文件: ${{ env.CACHE_PATH }}" + rm -rf ${{ env.CACHE_PATH }} + # 如果上层目录为空,也一并删除 + rmdir $(dirname ${{ env.CACHE_PATH }}) 2>/dev/null || true + echo "✅ 清理完成" \ No newline at end of file