name: Build on PR

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install dependencies
        run: npm ci

      - name: Run build
        run: npm run build

  typecheck:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install dependencies
        run: npm ci

      - name: Check types
        shell: bash
        run: npm run typecheck

  check-formatting:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install dependencies
        run: npm ci

      - name: Check formatting
        shell: bash
        run: npm run format:check

  test:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install dependencies
        run: npm ci

      - name: Check types
        shell: bash
        run: npm test -- --coverage

  integration-tests:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Set up Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install root dependencies
        run: npm ci

      - name: Install integration tests dependencies
        run: npm ci
        working-directory: integration-tests

      - name: Install Playwright browsers
        run: npx playwright install --with-deps chromium
        working-directory: integration-tests

      - name: Run integration tests
        run: npm test
        working-directory: integration-tests

      - name: Upload Playwright report
        if: ${{ !cancelled() }}
        uses: actions/upload-artifact@v4
        with:
          name: playwright-report
          path: integration-tests/playwright-report
          retention-days: 7

  arethetypeswrong:
    name: Are the types wrong
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repo
        uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: 24.x

      - name: Install dependencies
        run: npm ci

      - name: Run build
        run: npm run build

      - name: Run AreTheTypesWrong
        id: attw
        run: npm run attw -- --format ascii > $GITHUB_STEP_SUMMARY
