# 合并的前提(架构 §8):类型检查、单元测试、租户隔离用例都通过;接口契约校验通过。 name: ci on: push: branches: [main] pull_request: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: server: runs-on: ubuntu-24.04 services: postgres: image: postgres:16-alpine env: POSTGRES_USER: bd_owner POSTGRES_PASSWORD: dev-owner POSTGRES_DB: bid_doctor ports: ["5432:5432"] options: >- --health-cmd "pg_isready -U bd_owner" --health-interval 2s --health-retries 30 valkey: image: valkey/valkey:8-alpine ports: ["6379:6379"] env: BD_TEST_PG: 127.0.0.1:5432 BD_TEST_VALKEY: redis://127.0.0.1:6379/1 steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v6 with: version: "0.12.20" - run: uv sync --frozen - name: 数据库角色(和 deploy/compose/postgres/init-roles.sh 一致) env: PGPASSWORD: dev-owner run: | psql -h 127.0.0.1 -U bd_owner -d bid_doctor -v ON_ERROR_STOP=1 \ -c "CREATE ROLE bd_app LOGIN PASSWORD 'dev-app'" \ -c "CREATE ROLE bd_auth NOLOGIN BYPASSRLS" - working-directory: server run: | ../.venv/bin/ruff check src tests migrations ../.venv/bin/ruff format --check src tests migrations ../.venv/bin/pyright ../.venv/bin/lint-imports ../.venv/bin/pytest -q web: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: node-version: 22 cache: pnpm - run: pnpm install --frozen-lockfile --ignore-scripts - name: 接口类型要和 openapi.yaml 一致 run: | pnpm gen:api git diff --exit-code packages/api-client/src/schema.d.ts - run: pnpm typecheck - run: pnpm build contract: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - name: OpenAPI 完整校验(api-design §8) run: npx --yes @redocly/cli@1.34.0 lint docs/architecture/openapi.yaml --skip-rule operation-4xx-response --skip-rule no-server-example.com