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: [18.x, 20.x, 22.x, 23.x] NPM_SCRIPT: ["test:browserless"] include: - NAME: "Node" NODE_VERSION: "22.x" NPM_SCRIPT: "lint" - NAME: "Chrome/Firefox" NODE_VERSION: "22.x" NPM_SCRIPT: "test:browser" - NAME: "Chrome" NODE_VERSION: "22.x" NPM_SCRIPT: "test:slim" - NAME: "Chrome" NODE_VERSION: "22.x" NPM_SCRIPT: "test:no-deprecated" - NAME: "Chrome" NODE_VERSION: "22.x" NPM_SCRIPT: "test:selector-native" - NAME: "Chrome" NODE_VERSION: "22.x" NPM_SCRIPT: "test:esm" - NAME: "Firefox ESR (new)" NODE_VERSION: "22.x" NPM_SCRIPT: "test:firefox" - NAME: "Firefox ESR (old)" NODE_VERSION: "22.x" NPM_SCRIPT: "test:firefox" steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Use Node.js ${{ matrix.NODE_VERSION }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: ${{ matrix.NODE_VERSION }} cache: npm cache-dependency-path: '**/package-lock.json' - name: Set download URL for Firefox ESR (old) run: | echo "FIREFOX_SOURCE_URL=https://download.mozilla.org/?product=firefox-esr-latest-ssl&lang=en-US&os=linux64" >> "$GITHUB_ENV" if: contains(matrix.NAME, 'Firefox ESR (old)') - name: Set download URL for Firefox ESR (new) run: | echo "FIREFOX_SOURCE_URL=https://download.mozilla.org/?product=firefox-esr-next-latest-ssl&lang=en-US&os=linux64" >> "$GITHUB_ENV" if: contains(matrix.NAME, 'Firefox ESR (new)') - name: Install Firefox ESR run: | # Support: Firefox <135 only # Older Firefox used to be compressed using bzip2, newer using xz. Try # to uncompress using xz, fall back to bzip2 if that fails. # Note: this will download the old Firefox ESR twice, but it will still work # when the current ESR version starts to use xz with no changes to the code. wget --no-verbose "$FIREFOX_SOURCE_URL" -O - | tar -Jx -C "$HOME" || \ wget --no-verbose "$FIREFOX_SOURCE_URL" -O - | tar -jx -C "$HOME" echo "PATH=${HOME}/firefox:$PATH" >> "$GITHUB_ENV" echo "FIREFOX_BIN=${HOME}/firefox/firefox" >> "$GITHUB_ENV" if: contains(matrix.NAME, 'Firefox ESR') - 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 }} ie: runs-on: windows-latest env: NODE_VERSION: 22.x name: test:ie - IE steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: ${{ env.NODE_VERSION }} cache: npm cache-dependency-path: '**/package-lock.json' - name: Install dependencies run: npm ci - name: Run tests in Edge in IE mode run: npm run test:ie safari: runs-on: macos-latest env: NODE_VERSION: 22.x name: test:safari - Safari steps: - name: Checkout uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Use Node.js ${{ env.NODE_VERSION }} uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: node-version: ${{ env.NODE_VERSION }} cache: npm cache-dependency-path: '**/package-lock.json' - name: Install dependencies run: npm ci - name: Run tests run: npm run test:safari