name: CI on: [push, pull_request] 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: ES modules build, Chrome" NODE_VERSION: "18.x" NPM_SCRIPT: "test:esmodules" BROWSERS: "ChromeHeadless" - NAME: "Browser tests: AMD build, Chrome" 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@v3 - name: Cache uses: actions/cache@v3 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@v3.6.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: Run tests env: BROWSERS: ${{ matrix.BROWSERS }} run: | export PATH=${HOME}/firefox:$PATH npm run ${{ matrix.NPM_SCRIPT }}