From e23190e63cb121da79b92e6641a81a44dcea9252 Mon Sep 17 00:00:00 2001 From: ygj6 <7699524+ygj6@users.noreply.github.com> Date: Wed, 1 Dec 2021 06:56:39 +0800 Subject: [PATCH] Build: Migrate CI to GitHub Actions Closes gh-4800 --- .github/workflows/node.js.yml | 68 +++++++++++++++++++++++++++++++++++ Gruntfile.js | 10 +++--- 2 files changed, 73 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/node.js.yml diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml new file mode 100644 index 000000000..7bf861798 --- /dev/null +++ b/.github/workflows/node.js.yml @@ -0,0 +1,68 @@ +name: CI + +on: [push, pull_request] + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + # Node.js 10 is required by jQuery infra + NODE_VERSION: [10.x, 12.x, 14.x, 16.x] + NPM_SCRIPT: ["test:browserless"] + include: + - NAME: "Browser tests: full build, Chrome & Firefox stable" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:browser" + BROWSERS: "ChromeHeadless,FirefoxHeadless" + - NAME: "Browser tests: slim build, Chrome stable" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:slim" + BROWSERS: "ChromeHeadless" + - NAME: "Browser tests: no-deprecated build, Chrome stable" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:no-deprecated" + BROWSERS: "ChromeHeadless" + - NAME: "Browser tests: ES modules build, Chrome stable" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:esmodules" + BROWSERS: "ChromeHeadless" + - NAME: "Browser tests: AMD build, Chrome stable" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:amd" + BROWSERS: "ChromeHeadless" + - NAME: "Browser tests: full build, Firefox ESR" + NODE_VERSION: "16.x" + NPM_SCRIPT: "test:browser" + BROWSERS: "FirefoxHeadless" + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Cache + uses: actions/cache@v2 + 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@v2.1.2 + 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: Run test + env: + BROWSERS: ${{ matrix.BROWSERS }} + run: | + export PATH=${HOME}/firefox:$PATH + npm install + npm run ${{ matrix.NPM_SCRIPT }} diff --git a/Gruntfile.js b/Gruntfile.js index a3e4f0c46..ad9dd6d69 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -22,8 +22,8 @@ module.exports = function( grunt ) { var fs = require( "fs" ), gzip = require( "gzip-js" ), oldNode = /^v10\./.test( process.version ), - isTravis = process.env.TRAVIS, - travisBrowsers = process.env.BROWSERS && process.env.BROWSERS.split( "," ); + isCi = process.env.TRAVIS || process.env.GITHUB_ACTION, + ciBrowsers = process.env.BROWSERS && process.env.BROWSERS.split( "," ); if ( !grunt.option( "filename" ) ) { grunt.option( "filename", "jquery.js" ); @@ -241,10 +241,10 @@ module.exports = function( grunt ) { singleRun: true }, main: { - browsers: isTravis && travisBrowsers || [ "ChromeHeadless", "FirefoxHeadless" ] + browsers: isCi && ciBrowsers || [ "ChromeHeadless", "FirefoxHeadless" ] }, esmodules: { - browsers: isTravis && travisBrowsers || [ "ChromeHeadless" ], + browsers: isCi && ciBrowsers || [ "ChromeHeadless" ], options: { client: { qunit: { @@ -259,7 +259,7 @@ module.exports = function( grunt ) { } }, amd: { - browsers: isTravis && travisBrowsers || [ "ChromeHeadless" ], + browsers: isCi && ciBrowsers || [ "ChromeHeadless" ], options: { client: { qunit: {