name: Stack CI

# Generated by @factiii/stack v{VERSION}
# Runs builds and tests on push/PR to main.
# No deployment - deploy via SSH from dev machine.

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  ci:
    runs-on: ubuntu-latest
    env:
      CI: true
      ENV: test
      NODE_ENV: test
      DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
      TEST_DATABASE_URL: "postgresql://postgres:password@localhost:5440/factiii-test?connect_timeout=300"
      TEST_ADMIN_IP: "::ffff:127.0.0.1"
      SITE_URL: http://localhost:3000
      ALLOWED_ORIGINS: http://localhost:3000,http://localhost:5001
      ACCESS_TOKEN_SECRET: test-secret-key
      GOOGLE_CLIENT_ID: test-google-id
      APPLE_CLIENT_ID: com.factiii.test
      NEXT_PUBLIC_SITE_URL: http://localhost:3000
      NEXT_PUBLIC_API_URL: http://localhost:5001

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

      - name: Setup pnpm
        uses: pnpm/action-setup@v4

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

      - name: Install dependencies
        run: pnpm install

      - name: Build server
        run: pnpm build
        working-directory: apps/server

      - name: Build client
        run: pnpm build
        working-directory: client
        if: hashFiles('client/package.json') != ''

      - name: Setup Java (for Android)
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: '17'
        if: hashFiles('apps/mobile/android/build.gradle') != ''

      - name: Build Android
        run: |
          cd apps/mobile/android
          ./gradlew assembleRelease
        if: hashFiles('apps/mobile/android/build.gradle') != ''

      - name: Start Docker containers
        run: |
          chmod +x ./start.sh
          ./start.sh

      - name: Run tests
        run: pnpm test:server
