name: CI on: push: branches: [main] pull_request: jobs: backend: runs-on: ubuntu-latest services: postgres: image: pgvector/pgvector:pg17 env: POSTGRES_USER: hunjing POSTGRES_PASSWORD: hunjing_dev_password POSTGRES_DB: hunjing ports: ["5432:5432"] options: >- --health-cmd "pg_isready -U hunjing" --health-interval 5s --health-timeout 3s --health-retries 12 env: DATABASE_URL: postgresql+asyncpg://hunjing:hunjing_dev_password@127.0.0.1:5432/hunjing TEST_DATABASE_URL: postgresql+asyncpg://hunjing:hunjing_dev_password@127.0.0.1:5432/hunjing_test HUNJING_WEBHOOK_SECRET: whsec_ci steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v5 with: python-version: "3.12" - name: 安装依赖 working-directory: backend run: uv sync - name: 创建测试库 run: | sudo apt-get update && sudo apt-get install -y postgresql-client PGPASSWORD=hunjing_dev_password psql -h 127.0.0.1 -U hunjing -d hunjing \ -c "CREATE DATABASE hunjing_test" - name: Lint 与类型检查 working-directory: backend run: | uv run ruff check . uv run mypy app - name: 测试 working-directory: backend run: uv run pytest -q engine: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: 安装 CMake run: pipx install cmake - name: 构建(警告即错误) run: | cmake -S engine -B engine/build -DCMAKE_BUILD_TYPE=Debug cmake --build engine/build - name: 测试 run: ctest --test-dir engine/build --output-on-failure openapi: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: "22" - name: 契约校验 run: | npx --yes @redocly/cli@latest lint openapi/openapi.yaml \ --config openapi/redocly.yaml