From 9bc0df70be9455128a26f2e726213f0d544c70d4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Micha=C5=82=20Go=C5=82=C4=99biowski-Owczarek?= Date: Mon, 14 Mar 2022 17:58:41 +0100 Subject: [PATCH] Build: Test on Node 17, update Grunt & `karma-*` packages This adds testing on Node.js 17 in addition to the currently tested 10, 12, 14 and 16 versions. Also, update Grunt & `karma-*` packages. Testing in Karma on jsdom is broken in Node 17 at the moment; until we find a fix, this change disables such testing on Node 17 or newer. Node smoke tests & promises aplus tests are disabled on Node.js 10 as they depend on jsdom and the latest jsdom version doesn't run properly on Node 10. Closes gh-5023 (cherry picked from commit 2525cffc42934c0d5c7aa085bc45dd6a8282e840) --- .github/workflows/node.js.yml | 3 ++- Gruntfile.js | 42 ++++++++++++++++++++++++++--------- package.json | 26 +++++++++++----------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index 0eea38b89..61586fd30 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -9,7 +9,8 @@ jobs: fail-fast: false matrix: # Node.js 10 is required by jQuery infra - NODE_VERSION: [10.x, 12.x, 14.x, 16.x] + # Do not remove 16.x until jsdom tests are re-enabled on newer Node.js versions. + NODE_VERSION: [10.x, 12.x, 14.x, 16.x, 17.x] NPM_SCRIPT: ["test:browserless"] include: - NAME: "Browser tests: full build, Chrome & Firefox stable" diff --git a/Gruntfile.js b/Gruntfile.js index cbcfaa665..f93c3a2b5 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -12,8 +12,17 @@ module.exports = function( grunt ) { return data; } + // Support: Node.js <12 + // Skip running tasks that dropped support for Node.js 10 + // in this Node version. + function runIfNewNode( task ) { + return oldNode ? "print_old_node_message:" + task : task; + } + var fs = require( "fs" ), gzip = require( "gzip-js" ), + oldNode = /^v10\./.test( process.version ), + nodeV17OrNewer = !/^v1[0246]\./.test( process.version ), isCi = process.env.GITHUB_ACTION, ciBrowsers = process.env.BROWSERS && process.env.BROWSERS.split( "," ); @@ -333,6 +342,15 @@ module.exports = function( grunt ) { // Integrate jQuery specific tasks grunt.loadTasks( "build/tasks" ); + grunt.registerTask( "print_old_node_message", ( ...args ) => { + var task = args.join( ":" ); + grunt.log.writeln( "Old Node.js detected, running the task \"" + task + "\" skipped..." ); + } ); + + grunt.registerTask( "print_jsdom_message", () => { + grunt.log.writeln( "Node.js 17 or newer detected, skipping jsdom tests..." ); + } ); + grunt.registerTask( "lint", [ "jsonlint", @@ -340,22 +358,26 @@ module.exports = function( grunt ) { // would run the dist target first which would point to errors in the built // file, making it harder to fix them. We want to check the built file only // if we already know the source files pass the linter. - "eslint:dev", - "eslint:dist" + runIfNewNode( "eslint:dev" ), + runIfNewNode( "eslint:dist" ) ] ); grunt.registerTask( "lint:newer", [ "newer:jsonlint", // Don't replace it with just the task; see the above comment. - "newer:eslint:dev", - "newer:eslint:dist" + runIfNewNode( "newer:eslint:dev" ), + runIfNewNode( "newer:eslint:dist" ) ] ); - grunt.registerTask( "test:fast", "node_smoke_tests" ); + grunt.registerTask( "test:fast", runIfNewNode( "node_smoke_tests" ) ); grunt.registerTask( "test:slow", [ - "promises_aplus_tests", - "karma:jsdom" + runIfNewNode( "promises_aplus_tests" ), + + // Support: Node.js 17+ + // jsdom fails to connect to the Karma server in Node 17+. + // Until we figure out a fix, skip jsdom tests there. + nodeV17OrNewer ? "print_jsdom_message" : runIfNewNode( "karma:jsdom" ) ] ); grunt.registerTask( "test:prepare", [ @@ -371,7 +393,7 @@ module.exports = function( grunt ) { grunt.registerTask( "dev", [ "build:*:*", - "newer:eslint:dev", + runIfNewNode( "newer:eslint:dev" ), "newer:uglify", "remove_map_comment", "dist:*", @@ -380,13 +402,13 @@ module.exports = function( grunt ) { ] ); grunt.registerTask( "default", [ - "eslint:dev", + runIfNewNode( "eslint:dev" ), "build:*:*", "uglify", "remove_map_comment", "dist:*", "test:prepare", - "eslint:dist", + runIfNewNode( "eslint:dist" ), "test:fast", "compare_size" ] ); diff --git a/package.json b/package.json index 1d0bd016c..f2a08e8a2 100644 --- a/package.json +++ b/package.json @@ -30,29 +30,29 @@ "commitplease": "3.2.0", "core-js": "2.6.5", "eslint-config-jquery": "3.0.0", - "grunt": "1.3.0", + "grunt": "1.4.1", "grunt-babel": "8.0.0", - "grunt-cli": "1.3.2", + "grunt-cli": "1.4.3", "grunt-compare-size": "0.4.2", "grunt-contrib-uglify": "3.4.0", "grunt-contrib-watch": "1.1.0", "grunt-eslint": "22.0.0", "grunt-git-authors": "3.2.0", - "grunt-jsonlint": "1.1.0", - "grunt-karma": "4.0.0", + "grunt-jsonlint": "2.1.2", + "grunt-karma": "4.0.2", "grunt-newer": "1.3.0", "grunt-npmcopy": "0.2.0", "gzip-js": "0.3.2", - "husky": "1.3.1", - "insight": "0.10.1", - "jsdom": "13.2.0", - "karma": "5.2.3", - "karma-browserstack-launcher": "1.4.0", - "karma-chrome-launcher": "2.2.0", - "karma-firefox-launcher": "1.1.0", + "husky": "4.2.5", + "insight": "0.10.3", + "jsdom": "19.0.0", + "karma": "^6.3.17", + "karma-browserstack-launcher": "1.6.0", + "karma-chrome-launcher": "3.1.1", + "karma-firefox-launcher": "2.1.2", "karma-ie-launcher": "1.0.0", - "karma-jsdom-launcher": "8.0.2", - "karma-qunit": "3.0.0", + "karma-jsdom-launcher": "12.0.0", + "karma-qunit": "4.1.2", "load-grunt-tasks": "5.1.0", "native-promise-only": "0.8.1", "promises-aplus-tests": "2.1.2", -- 2.39.5