# ============================================================================= # ZhikunCode — 主 CI 流程 # 触发条件:push 到 main 分支 / 所有 Pull Request # ============================================================================= name: CI on: push: branches: [main] pull_request: branches: ['*'] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: king-case-evidence: name: King case evidence verification runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Node.js 22 uses: actions/setup-node@v4 with: node-version: '22' - name: Install FFmpeg run: sudo apt-get update && sudo apt-get install -y ffmpeg - name: Recompute public evidence run: node scripts/verify-king-case.mjs # ========================================================================= # Job 1: 后端 Java 测试 # ========================================================================= backend-build: name: Backend Build (Java 21 + Maven) runs-on: ubuntu-latest timeout-minutes: 45 defaults: run: working-directory: backend steps: # 检出代码 - uses: actions/checkout@v4 # 配置 JDK 21 - name: Set up JDK 21 uses: actions/setup-java@v4 with: java-version: '21' distribution: 'temurin' cache: 'maven' cache-dependency-path: backend/pom.xml # 真实网络集成测试由环境变量门禁;默认测试套件无需 API Key。 - name: Run tests run: chmod +x mvnw && ./mvnw test -B -q # ========================================================================= # Job 2: 前端测试、构建与类型检查 # ========================================================================= frontend-build: name: Frontend Test and Build (Node 22 + Vite) runs-on: ubuntu-latest timeout-minutes: 20 defaults: run: working-directory: frontend steps: # 检出代码 - uses: actions/checkout@v4 # 配置 Node.js(从 .nvmrc 读取版本) - name: Set up Node.js uses: actions/setup-node@v4 with: node-version-file: '.nvmrc' cache: 'npm' cache-dependency-path: frontend/package-lock.json # 安装依赖(CI 模式,确保 lock 文件一致) - name: Install dependencies run: npm ci - name: Run tests run: npm run test:run # 构建项目(tsc + vite build,验证编译通过) - name: Build run: npm run build # ========================================================================= # Job 3: Python 服务测试 # ========================================================================= python-test: name: Python Test (3.11 + FastAPI) runs-on: ubuntu-latest defaults: run: working-directory: python-service steps: # 检出代码 - uses: actions/checkout@v4 # 配置 Python 3.11 - name: Set up Python 3.11 uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' cache-dependency-path: python-service/requirements.txt # 安装依赖 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install -e . pip install pytest pytest-asyncio httpx # 运行单元测试(排除需要真实 API Key 的集成测试) - name: Run tests run: pytest tests/ -v --ignore=tests/integration -k "not api_key and not llm" # ========================================================================= # Job 4: Docker 镜像构建验证(仅 main 分支 push) # ========================================================================= docker-build: name: Docker Build Verification runs-on: ubuntu-latest if: github.event_name == 'push' && github.ref == 'refs/heads/main' steps: # 检出代码 - uses: actions/checkout@v4 # 设置 Docker Buildx(支持多阶段构建缓存) - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # 构建镜像(仅验证构建成功,不推送) - name: Build Docker image uses: docker/build-push-action@v5 with: context: . push: false tags: zhikuncode:ci-${{ github.sha }} cache-from: type=gha cache-to: type=gha,mode=max