name: Run Tests

permissions:
  contents: read

on:
  pull_request:
    branches:
      - main
      - dev

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Install Node
        uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
        with:
          node-version: '24'

      - name: Copy config file
        run: cp config/config.example.yml config/config.yml

      - name: Install dependencies
        run: npm ci

      - name: Create database index.ts
        run: npm run set:sqlite

      - name: Create build file
        run: npm run set:oss

      - name: Generate database migrations
        run: npm run db:generate

      - name: Apply database migrations
        run: npm run db:push

      - name: Test with tsc
        run: npx tsc --noEmit

      - name: Start app in background
        run: nohup npm run dev &

      - name: Wait for app availability
        run: |
          for i in {1..5}; do
            if curl --silent --fail http://localhost:3002/auth/login; then
              echo "App is up"
              exit 0
            fi
            echo "Waiting for the app... attempt $i"
            sleep 5
          done
          echo "App failed to start"
          exit 1

  build-sqlite:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Build Docker image sqlite
        run: make dev-build-sqlite

  build-postgres:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Build Docker image pg
        run: make dev-build-pg
