docs: redesign documentation site theme #123
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # ───────────────────────────────────────────────────────────── | |
| # vextjs CI — Lint → Typecheck → Unit → Integration → E2E → Coverage | |
| # | |
| # 触发条件:push / pull_request(所有分支) | |
| # Node.js 版本矩阵:20 / 22 | |
| # | |
| # 流水线结构: | |
| # 1. lint + typecheck(快速门禁,Node 20 / 22) | |
| # 2. unit tests(无外部依赖,Node 20 / 22) | |
| # 3. integration tests(无外部依赖,使用 mock,Node 20 / 22) | |
| # 4. e2e tests(真实 HTTP 服务器,仅 Node 22) | |
| # 5. coverage report(仅 Node 22,上传 codecov) | |
| # | |
| # @see plans/v1/10-testing.md §9(CI 集成指南) | |
| # @see IMPLEMENTATION-PLAN.md 任务 4.5 | |
| # ───────────────────────────────────────────────────────────── | |
| name: CI | |
| on: | |
| push: | |
| branches: ["*"] | |
| pull_request: | |
| branches: [main] | |
| # 取消同一 PR / branch 的旧运行 | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| # ── 全局环境变量 ────────────────────────────────────────────── | |
| env: | |
| NODE_ENV: test | |
| # ── Jobs ───────────────────────────────────────────────────── | |
| jobs: | |
| # ──────────────────────────────────────────────────────────── | |
| # 0. Version Check(版本号一致性门禁) | |
| # ──────────────────────────────────────────────────────────── | |
| version-check: | |
| name: Version Sync Check | |
| runs-on: ubuntu-latest | |
| # 版本一致性任何时候都应满足,push / PR 均运行 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: Run version sync check | |
| run: bash scripts/check-version-sync.sh | |
| # ──────────────────────────────────────────────────────────── | |
| # 1. Lint + Typecheck(快速门禁) | |
| # ──────────────────────────────────────────────────────────── | |
| lint-typecheck: | |
| name: Lint & Typecheck (Node ${{ matrix.node-version }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node-version: [20, 22] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: TypeScript type check | |
| run: npx tsc --noEmit | |
| - name: Build (verify compilation) | |
| run: npm run build | |
| # ──────────────────────────────────────────────────────────── | |
| # 2. Unit Tests(无外部依赖) | |
| # ──────────────────────────────────────────────────────────── | |
| unit-tests: | |
| name: Unit Tests (Node ${{ matrix.node-version }}) | |
| runs-on: ubuntu-latest | |
| needs: lint-typecheck | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node-version: [20, 22] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run unit tests | |
| run: npx vitest run test/unit --reporter=verbose | |
| # ──────────────────────────────────────────────────────────── | |
| # 3. Integration Tests(使用 mock,无外部服务依赖) | |
| # ──────────────────────────────────────────────────────────── | |
| integration-tests: | |
| name: Integration Tests (Node ${{ matrix.node-version }}) | |
| runs-on: ubuntu-latest | |
| needs: lint-typecheck | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node-version: [20, 22] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js ${{ matrix.node-version }} | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build (required for cluster integration tests) | |
| run: npm run build | |
| - name: Run integration tests | |
| run: npx vitest run test/integration --reporter=verbose | |
| # ──────────────────────────────────────────────────────────── | |
| # 4. E2E Tests(真实 HTTP 服务器,仅 Node 22) | |
| # ──────────────────────────────────────────────────────────── | |
| e2e-tests: | |
| name: E2E Tests (Node 22) | |
| runs-on: ubuntu-latest | |
| needs: [unit-tests, integration-tests] | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build (required for CLI E2E tests) | |
| run: npm run build | |
| - name: Run E2E tests | |
| run: npx vitest run test/e2e --reporter=verbose | |
| timeout-minutes: 10 | |
| # ──────────────────────────────────────────────────────────── | |
| # 5. Coverage Report(仅 Node 22,上传 Codecov) | |
| # ──────────────────────────────────────────────────────────── | |
| coverage: | |
| name: Coverage Report | |
| runs-on: ubuntu-latest | |
| needs: [unit-tests, integration-tests] | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run tests with coverage | |
| run: npx vitest run --coverage --coverage.provider=v8 --coverage.reporter=lcov --coverage.reporter=text | |
| continue-on-error: true | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v4 | |
| with: | |
| files: coverage/lcov.info | |
| fail_ci_if_error: false | |
| env: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| # ──────────────────────────────────────────────────────────── | |
| # 6. 文档站构建验证(PR 门禁) | |
| # ──────────────────────────────────────────────────────────── | |
| docs-build: | |
| name: Build Docs | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js 22 | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: "npm" | |
| cache-dependency-path: website/package-lock.json | |
| - name: Install website dependencies | |
| working-directory: website | |
| run: npm ci | |
| - name: Build docs (rspress build) | |
| working-directory: website | |
| run: npm run build | |
| env: | |
| NODE_ENV: production | |
| # ──────────────────────────────────────────────────────────── | |
| # 7. CI 总结(所有检查通过后的统一 status check) | |
| # ──────────────────────────────────────────────────────────── | |
| ci-ok: | |
| name: CI ✅ | |
| runs-on: ubuntu-latest | |
| needs: | |
| [ | |
| version-check, | |
| lint-typecheck, | |
| unit-tests, | |
| integration-tests, | |
| e2e-tests, | |
| docs-build, | |
| ] | |
| if: always() | |
| steps: | |
| - name: Check all jobs passed | |
| run: | | |
| echo "version-check: ${{ needs.version-check.result }}" | |
| echo "lint-typecheck: ${{ needs.lint-typecheck.result }}" | |
| echo "unit-tests: ${{ needs.unit-tests.result }}" | |
| echo "integration-tests: ${{ needs.integration-tests.result }}" | |
| echo "e2e-tests: ${{ needs.e2e-tests.result }}" | |
| echo "docs-build: ${{ needs.docs-build.result }}" | |
| # version-check 可能被跳过(package.json 未变更),跳过视为通过 | |
| if [[ "${{ needs.version-check.result }}" != "success" && "${{ needs.version-check.result }}" != "skipped" ]]; then | |
| echo "❌ version-check failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.lint-typecheck.result }}" != "success" ]]; then | |
| echo "❌ lint-typecheck failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.unit-tests.result }}" != "success" ]]; then | |
| echo "❌ unit-tests failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.integration-tests.result }}" != "success" ]]; then | |
| echo "❌ integration-tests failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.e2e-tests.result }}" != "success" ]]; then | |
| echo "❌ e2e-tests failed" | |
| exit 1 | |
| fi | |
| if [[ "${{ needs.docs-build.result }}" != "success" ]]; then | |
| echo "❌ docs-build failed" | |
| exit 1 | |
| fi | |
| echo "✅ All CI checks passed!" |