name: CI on: push: branches: [ master, main, develop ] paths: - 'packages/**' - 'package.json' - 'pnpm-lock.yaml' - 'tsconfig.json' - 'turbo.json' - 'jest.config.*' - '.github/workflows/ci.yml' pull_request: branches: [ master, main, develop ] paths: - 'packages/**' - 'package.json' - 'pnpm-lock.yaml' - 'tsconfig.json' - 'turbo.json' - 'jest.config.*' - '.github/workflows/ci.yml' jobs: ci: runs-on: ubuntu-latest env: TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} TURBO_TEAM: ${{ vars.TURBO_TEAM }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'pnpm' - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: wasm32-unknown-unknown # 缓存 Rust 编译结果 - name: Cache Rust dependencies uses: Swatinem/rust-cache@v2 with: workspaces: packages/engine cache-on-failure: true # 缓存 wasm-pack - name: Cache wasm-pack uses: actions/cache@v4 with: path: ~/.cargo/bin/wasm-pack key: wasm-pack-${{ runner.os }} - name: Install wasm-pack run: | if ! command -v wasm-pack &> /dev/null; then cargo install wasm-pack fi - name: Install dependencies run: pnpm install --no-frozen-lockfile # 构建所有包 (使用 Turborepo Remote Cache) - name: Build all packages run: pnpm run build - name: Copy WASM files to ecs-engine-bindgen run: | mkdir -p packages/ecs-engine-bindgen/src/wasm cp packages/engine/pkg/es_engine.js packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine.d.ts packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine_bg.wasm packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine_bg.wasm.d.ts packages/ecs-engine-bindgen/src/wasm/ # 类型检查 - name: Type check run: pnpm run type-check # Lint 检查 - name: Lint check run: pnpm run lint # 测试 - name: Run tests with coverage run: pnpm run test:ci - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 continue-on-error: true with: file: ./coverage/lcov.info flags: unittests name: codecov-umbrella fail_ci_if_error: false # 构建 npm 包 - name: Build npm packages run: pnpm run build:npm # 上传构建产物 - name: Upload build artifacts uses: actions/upload-artifact@v4 with: name: build-artifacts path: | packages/*/dist/ packages/*/bin/ retention-days: 7