name: Node.js CI

on: [push, pull_request]

jobs:

  node-tests:
    runs-on: ubuntu-latest
    timeout-minutes: 30

    strategy:
      matrix:
        node-version: [16.x, 22.x]

    steps:
    - uses: actions/checkout@v4
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'npm'
    - name: Install Python
      run: sudo apt install python3
    - name: Install PHP CLI
      run: sudo apt install php-cli
    - name: Install Node.js dependencies
      run: npm install
    - name: Run end-to-end tests
      run: npm run test:e2e
    - name: Run unit tests
      run: npm run test:unit

  bun-tests:
    runs-on: ubuntu-latest
    timeout-minutes: 30

    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Remove Node.js installed by setup-node action (if any)
      run: |
        if command -v node &> /dev/null; then
          sudo rm -rf "$(which node)"
        fi
        if command -v npm &> /dev/null; then
          sudo rm -rf "$(which npm)"
        fi

    - name: Setup Bun
      uses: oven-sh/setup-bun@v1
    - name: Install dependencies using Bun
      run: bun install
    - name: Run end-to-end tests with Bun
      run: bun run test:e2e
    - name: Run unit tests with Bun
      run: bun run test:unit
