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: full build, Firefox ESR" NODE_VERSION: "18.x" NPM_SCRIPT: "test:browser" BROWSERS: "FirefoxHeadless" steps: - name: Checkout uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3.6.0 - name: Cache uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3.3.1 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@5e21ff4d9bc1a8cf6de233a3057d20ec6b3fb69d # v3.8.1 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: Build jQuery for Lint run: npm run build:all if: matrix.NPM_SCRIPT == 'test:browserless' - name: Lint code run: npm run lint if: matrix.NODE_VERSION == '18.x' - name: Prepare tests run: npm run pretest - name: Run tests env: BROWSERS: ${{ matrix.BROWSERS }} run: | export PATH=${HOME}/firefox:$PATH npm run ${{ matrix.NPM_SCRIPT }}