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@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1

      - name: Use Node.js ${{ matrix.NODE_VERSION }}
        uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.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 }}
