name: CI on: push: branches: [main] pull_request: branches: [main] concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: test-backend: name: Backend Tests runs-on: ubuntu-latest defaults: run: working-directory: ./backend env: DATABASE_URL: file:./test.db JWT_SECRET: test-secret # ANTHROPIC_API_KEY enables the LLM-judge gate; tests skip gracefully when absent ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: npm cache-dependency-path: package-lock.json - name: Install dependencies working-directory: . run: npm ci - name: Setup test database run: npm run db:setup - name: Seed test database run: npx prisma db seed # Run test files sequentially (--test-concurrency=1) to prevent shared-DB # conflicts between e2e tests that mutate state and services tests that rely on it. - name: Run unit + e2e + LLM-judge tests run: node --import tsx --test-concurrency=1 --test "test/**/*.test.ts" test-frontend: name: Frontend Type Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: npm cache-dependency-path: package-lock.json - name: Install dependencies working-directory: . run: npm ci - name: Type check working-directory: ./frontend run: npm test