name: CI

on:
  pull_request:
    branches:
      - main
      - feature/next
      - release/v3
      - release/v4
  push:
    branches:
      - main
      - feature/next
      - release/v3
      - release/v4
  workflow_dispatch:

jobs:
  test:
    name: Test (v5 + optional v6)
    runs-on: ubuntu-latest
    env:
      NODE_OPTIONS: '--max-old-space-size=4096'
      SEQUELIZE_CLS: cls-hooked
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Select Node version
        id: node
        run: |
          echo "version=20.20.0" >> "$GITHUB_OUTPUT"

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: ${{ steps.node.outputs.version }}
          cache: npm

      - name: Install dependencies
        run: |
          if [ -f package-lock.json ]; then
            npm ci
          else
            npm install
          fi

      - name: Detect test:v6 script
        id: v6
        run: |
          node -e "const scripts=require('./package.json').scripts||{}; process.stdout.write('enabled=' + String(!!scripts['test:v6']));" >> "$GITHUB_OUTPUT"

      - name: Run Sequelize v5 suite
        run: npm test -- --coverage

      - name: Run Sequelize v6 suite
        if: ${{ steps.v6.outputs.enabled == 'true' && !(github.ref == 'refs/heads/release/v3' || github.base_ref == 'release/v3') }}
        run: npm run test:v6

  examples-smoke:
    name: Examples Smoke
    runs-on: ubuntu-latest
    needs: test
    env:
      NODE_OPTIONS: '--max-old-space-size=4096'
      SEQUELIZE_CLS: cls-hooked
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: '20.20.0'
          cache: npm

      - name: Install root dependencies
        run: npm ci

      - name: Smoke test examples/v3
        run: |
          npm --prefix examples/v3 install
          npm --prefix examples/v3 run start

      - name: Smoke test examples/v4 against current commit
        run: |
          npm --prefix examples/v4 install
          npm --prefix examples/v4 install --no-save "$GITHUB_WORKSPACE"
          npm --prefix examples/v4 run start
