name: CI on: pull_request: push: branches-ignore: "dependabot/**" permissions: contents: read # to fetch code (actions/checkout) jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: # Node.js 10 is required by jQuery infra # Do not remove 16.x until jsdom tests are re-enabled on newer Node.js versions. NODE_VERSION: [10.x, 16.x, 18.x, 20.x] NPM_SCRIPT: ["test:browserless"] include: - NAME: "Browser tests: full build, Chrome, Firefox & WebKit" NODE_VERSION: "18.x" NPM_SCRIPT: "test:browser" BROWSERS: "ChromeHeadless,FirefoxHeadless,WebkitHeadless" - NAME: "Browser tests: slim build, Chrome" NODE_VERSION: "18.x" NPM_SCRIPT: "test:slim" BROWSERS: "ChromeHeadless" - NAME: "Browser tests: no-deprecated build, Chrome" NODE_VERSION: "18.x" NPM_SCRIPT: "test:no-deprecated" BROWSERS: "ChromeHeadless" - NAME: "Browser tests: selector-native build, Chrome" NODE_VERSION: "18.x" NPM_SCRIPT: "test:selector-native" BROWSERS: "ChromeHeadless" - NAME: "Browser tests: AMD build, Chrome stable" NODE_VERSION: "18.x" NPM_SCRIPT: "test:amd" BROWSERS: "ChromeHeadless" - NAME: "Browser tests: full build, Firefox ESR" NODE_VERSION: "18.x" NPM_SCRIPT: "test:browser" BROWSERS: "FirefoxHeadless" steps: - name: Checkout uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: Cache uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0 with: path: ~/.npm key: ${{ runner.os }}-node-${{ matrix.NODE_VERSION }}-npm-lock-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-${{ matrix.NODE_VERSION }}-npm-lock- - name: Use Node.js ${{ matrix.NODE_VERSION }} uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0 with: node-version: ${{ matrix.NODE_VERSION }} - name: Install firefox ESR run: | export FIREFOX_SOURCE_URL='https://download.mozilla.org/?product=firefox-esr-latest&lang=en-US&os=linux64' wget --no-verbose $FIREFOX_SOURCE_URL -O - | tar -jx -C ${HOME} if: contains(matrix.NAME, 'Firefox ESR') - name: Install dependencies run: npm install - name: Install Playwright dependencies run: npx playwright-webkit install-deps if: matrix.NPM_SCRIPT == 'test:browser' && contains(matrix.BROWSERS, 'WebkitHeadless') - name: Lint code run: npm run build && npm run lint if: matrix.NODE_VERSION == '18.x' - name: Run tests env: BROWSERS: ${{ matrix.BROWSERS }} run: | export PATH=${HOME}/firefox:$PATH npm run ${{ matrix.NPM_SCRIPT }}