name: ci on: [push, pull_request] jobs: backend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v3 - run: uv sync working-directory: backend - run: uv run ruff check . working-directory: backend - run: uv run pytest -q # federation/nplus1/golden 포함 working-directory: backend frontend-unit: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: { node-version: 20, cache: pnpm, cache-dependency-path: frontend/pnpm-lock.yaml } - run: pnpm install --frozen-lockfile working-directory: frontend - run: pnpm exec tsc --noEmit working-directory: frontend - run: pnpm lint working-directory: frontend - run: pnpm test working-directory: frontend e2e: runs-on: ubuntu-latest needs: [backend, frontend-unit] env: LLM_PROVIDER: heuristic # CI는 Ollama 없이 결정론적 ARI_ALLOW_TEST_RESET: "1" steps: - uses: actions/checkout@v4 - uses: astral-sh/setup-uv@v3 - run: uv sync && uv run alembic upgrade head && uv run python -m app.seed working-directory: backend - run: ARI_ALLOW_TEST_RESET=1 LLM_PROVIDER=heuristic uv run uvicorn app.main:app --port 31800 & working-directory: backend - uses: pnpm/action-setup@v4 - uses: actions/setup-node@v4 with: { node-version: 20, cache: pnpm, cache-dependency-path: frontend/pnpm-lock.yaml } - run: pnpm install --frozen-lockfile working-directory: frontend - run: pnpm exec playwright install --with-deps chromium working-directory: frontend - run: pnpm exec playwright test --workers=1 working-directory: frontend - uses: actions/upload-artifact@v4 if: failure() with: { name: playwright-report, path: frontend/playwright-report }