name: CI

on:
    pull_request:
        types:
          - opened
          - synchronize
    push:
      branches:
        - main
        - canary
    merge_group:

jobs:
    test:
        runs-on: ubuntu-latest
        strategy:
            fail-fast: false
            matrix:
                node-version: [22.x, 24.x]
        steps:
            - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
              with:
                    fetch-depth: 0

            - name: Cache turbo build setup
              uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
              with:
                path: .turbo
                key: ${{ runner.os }}-turbo-${{ github.sha }}
                restore-keys: |
                  ${{ runner.os }}-turbo-

            - uses: pnpm/action-setup@a7487c7e89a18df4991f7f222e4898a00d66ddda # v4.1.0

            - uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
              with:
                node-version: ${{ matrix.node-version }}
                registry-url: 'https://registry.npmjs.org'
                cache: pnpm

            - name: Install
              run: pnpm install

            - name: Build
              env:
                TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
                TURBO_TEAM: ${{ vars.TURBO_TEAM || github.repository_owner }}
                TURBO_CACHE: remote:rw
              run: pnpm build

            - name: Start Docker Containers
              run: |
                docker compose up -d
                # Wait for services to be ready (optional)
                sleep 10

            - name: Lint
              env:
                TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
                TURBO_TEAM: ${{ vars.TURBO_TEAM || github.repository_owner }}
                TURBO_CACHE: remote:rw
              run: pnpm lint

            - name: Test
              env:
                TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
                TURBO_TEAM: ${{ vars.TURBO_TEAM || github.repository_owner }}
              run: pnpm test

            - name: Typecheck
              env:
                TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
                TURBO_TEAM: ${{ vars.TURBO_TEAM || github.repository_owner }}
                TURBO_CACHE: remote:rw
              run: pnpm typecheck

            - name: Stop Docker Containers
              run: docker compose down
            