name: CI

on:
  push:
  pull_request:

jobs:
  frontend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          cache: npm
      - run: npm ci
      - run: npm run lint
      - run: npm run check:tokens
      - run: npm test
      - run: npm run build

  storybook-a11y:
    # Axe runs against every story in the static build; a violation fails the build.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          cache: npm
      - run: npm ci
      - run: npx playwright install --with-deps chromium
      - run: npm run build-storybook
      - run: npm run test-storybook:ci

  backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-dotnet@v4
        with:
          dotnet-version: 10.0.x
      - run: dotnet test backend/BigRegister.sln

  api-client-drift:
    # The committed typed client must match the backend OpenAPI doc.
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 24
          cache: npm
      - uses: actions/setup-dotnet@v4
        with:
          # 8.0 for the bundled NSwag runtime, 10.0 to build/emit the spec.
          dotnet-version: |
            8.0.x
            10.0.x
      - run: npm ci
      - run: npm run gen:api
      - run: git diff --exit-code src/app/shared/infrastructure/api-client.ts backend/swagger.json
