]> source.dussan.org Git - jquery.git/commitdiff
Build: Don't install jsdom 3 on Node.js 0.10 & 0.12 by default
authorMichał Gołębiowski <m.goleb@gmail.com>
Mon, 3 Aug 2015 18:28:37 +0000 (20:28 +0200)
committerMichał Gołębiowski <m.goleb@gmail.com>
Tue, 8 Sep 2015 15:42:38 +0000 (17:42 +0200)
jsdom 3 requires Python & Visual Studio on Windows which is a significant
barrier to contributors. Newer jsdom versions don't require pre-compiling
but work only on io.js. This commit installs the new jsdom everywhere (it
does install in old Node.js, it just won't work) and executes Node-related
tests only on newer Nodes or if a working jsdom version is installed. The
latter can be achieved by running the `old_jsdom` task.

Node.js is merging with io.js soon so this will become a smaller problem over
time.

One drawback is our Jenkins setup runs on Node 0.10 so it won't be running
Node tests anymore. We have Travis set up on io.js, though so all PRs
have those tests run. When the new LTS Node.js arrives (as it soon merges
with io.js) we should update our Jenkins infrastructure so that it runs on this
new version.

Fixes gh-2519
Closes gh-2526

Gruntfile.js
build/tasks/install_jsdom.js [deleted file]
build/tasks/install_old_jsdom.js [new file with mode: 0644]
build/tasks/node_smoke_tests.js
package.json

index c05b4254643a06bcb31eb166de7ec5ceb1bc729c..97289a0ac3f170ead2477242667bf0867fe6d354 100644 (file)
@@ -14,7 +14,18 @@ module.exports = function( grunt ) {
        var fs = require( "fs" ),
                stripJSONComments = require( "strip-json-comments" ),
                gzip = require( "gzip-js" ),
-               srcHintOptions = readOptionalJSON( "src/.jshintrc" );
+               srcHintOptions = readOptionalJSON( "src/.jshintrc" ),
+               newNode = !/^v0/.test( process.version ),
+
+               // Allow to skip jsdom-related tests in Node.js < 1.0.0
+               runJsdomTests = newNode || ( function() {
+                       try {
+                               require( "jsdom" );
+                               return true;
+                       } catch ( e ) {
+                               return false;
+                       }
+               } )();
 
        // The concatenated file won't pass onevar
        // But our modules can
@@ -182,9 +193,14 @@ module.exports = function( grunt ) {
 
        grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] );
 
-       grunt.registerTask( "test_fast", [ "node_smoke_tests" ] );
+       // Don't run Node-related tests in Node.js < 1.0.0 as they require an old
+       // jsdom version that needs compiling, making it harder for people to compile
+       // jQuery on Windows. (see gh-2519)
+       grunt.registerTask( "test_fast", runJsdomTests ? [ "node_smoke_tests" ] : [] );
 
-       grunt.registerTask( "test", [ "test_fast", "promises_aplus_tests" ] );
+       grunt.registerTask( "test", [ "test_fast" ].concat(
+               runJsdomTests ? [ "promises_aplus_tests" ] : []
+       ) );
 
        // Short list as a high frequency watch task
        grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] );
diff --git a/build/tasks/install_jsdom.js b/build/tasks/install_jsdom.js
deleted file mode 100644 (file)
index 73142b6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-module.exports = function( grunt ) {
-       grunt.registerTask( "jsdom", function() {
-               var current,
-                       pkg = grunt.config( "pkg" ),
-                       version = pkg.jsdomVersions[
-
-                               // Unfortunately, this is currently the only
-                               // way to tell the difference between Node and iojs
-                               /^v0/.test( process.version ) ? "node" : "iojs"
-                       ];
-
-               try {
-                       current = require( "jsdom/package.json" ).version;
-                       if ( current === version ) {
-                               return;
-                       }
-               } catch ( e ) {}
-
-               // Use npm on the command-line
-               // There is no local npm
-               grunt.util.spawn( {
-                       cmd: "npm",
-                       args: [ "install", "jsdom@" + version ],
-                       opts: { stdio: "inherit" }
-               }, this.async() );
-       } );
-};
diff --git a/build/tasks/install_old_jsdom.js b/build/tasks/install_old_jsdom.js
new file mode 100644 (file)
index 0000000..271e0cb
--- /dev/null
@@ -0,0 +1,20 @@
+module.exports = function( grunt ) {
+
+       "use strict";
+
+       // Run this task to run jsdom-related tests on Node.js < 1.0.0.
+       grunt.registerTask( "old_jsdom", function() {
+               if ( !/^v0/.test( process.version ) ) {
+                       console.warn( "The old_jsdom task doesn\'t need to be run in io.js or new Node.js" );
+                       return;
+               }
+
+               // Use npm on the command-line
+               // There is no local npm
+               grunt.util.spawn( {
+                       cmd: "npm",
+                       args: [ "install", "jsdom@3" ],
+                       opts: { stdio: "inherit" }
+               }, this.async() );
+       } );
+};
index 9334516d9ec516c3ba3d0c5347a27bba1f520ab0..1b860b1409c480834c109e0a5d04aa3c0d7fa555 100644 (file)
@@ -5,7 +5,7 @@ module.exports = function( grunt ) {
        var fs = require( "fs" ),
                spawnTest = require( "./lib/spawn_test.js" ),
                testsDir = "./test/node_smoke_tests/",
-               nodeSmokeTests = [ "jsdom", "babel:nodeSmokeTests" ];
+               nodeSmokeTests = [ "babel:nodeSmokeTests" ];
 
        // Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
        // All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
index 27ca0757f07033db49d3ea0caaa3aacf338d240d..c513b892d01428992b32d7a0470a34d583e016e9 100644 (file)
@@ -39,6 +39,7 @@
     "grunt-jsonlint": "1.0.4",
     "grunt-npmcopy": "0.1.0",
     "gzip-js": "0.3.2",
+    "jsdom": "5.6.1",
     "load-grunt-tasks": "1.0.0",
     "native-promise-only": "0.7.8-a",
     "promises-aplus-tests": "2.1.0",
     "testswarm": "1.1.0",
     "win-spawn": "2.0.0"
   },
-  "jsdomVersions": {
-    "node": "3.1.2",
-    "iojs": "5.3.0"
-  },
   "scripts": {
     "build": "npm install && grunt",
     "start": "grunt watch",