name: Node

on:
  pull_request:
  push:
    branches-ignore: "dependabot/**"

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    name: ${{ matrix.NPM_SCRIPT }} - ${{ matrix.NAME }} (${{ matrix.NODE_VERSION }})
    strategy:
      fail-fast: false
      matrix:
        NAME: ["Node"]
        NODE_VERSION: [20.x, 22.x, 24.x]
        NPM_SCRIPT: ["test:browserless"]
        include:
          - NAME: "Node"
            NODE_VERSION: "24.x"
            NPM_SCRIPT: "lint"
    steps:
      - name: Checkout
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

      - name: Use Node.js ${{ matrix.NODE_VERSION }}
        uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
        with:
          node-version: ${{ matrix.NODE_VERSION }}
          cache: npm
          cache-dependency-path: '**/package-lock.json'

      - name: Install dependencies
        run: npm ci

      - name: Build all for linting
        run: npm run build:all
        if: contains(matrix.NPM_SCRIPT, 'lint')

      - name: Run tests
        run: npm run ${{ matrix.NPM_SCRIPT }}
