Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

added checks to run grunt #9052

Merged
merged 6 commits into from
Jul 21, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .travis.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
language: node_js
node_js:
- "4.1"
- "0.10"

before_install:
- git submodule update --init --recursive
Expand All @@ -9,6 +9,7 @@ install:
- npm install

before_script:
- npm install -g npm@2.14
- npm install -g grunt-cli

script:
Expand Down
56 changes: 56 additions & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,23 @@
var _ = require('underscore');
var timer = require("grunt-timer");
var jasmineCfg = require('./lib/build/tasks/jasmine.js');
var duplicatedDependencies = require('./lib/build/tasks/shrinkwrap-duplicated-dependencies.js');

var REQUIRED_NPM_VERSION = /2.14.[0-9]+/;
var REQUIRED_NODE_VERSION = /0.10.[0-9]+/;
var SHRINKWRAP_MODULES_TO_VALIDATE = [
'backbone',
'camshaft-reference',
'carto',
'cartodb.js',
'cartocolor',
'd3',
'jquery',
'leaflet',
'perfect-scrollbar',
'torque.js',
'turbo-carto'
];

/**
* CartoDB UI assets generation
Expand All @@ -10,6 +27,45 @@

if (timer) timer.init(grunt);

function preFlight(done) {
function checkVersion(cmd, versionRegExp, name, done) {
require("child_process").exec(cmd, function (error, stdout, stderr) {
var err = null;
if (error) {
err = 'failed to check version for ' + name;
} else {
if (!versionRegExp.test(stdout)) {
err = 'installed ' + name + ' version does not match with required one ' + versionRegExp.toString() + " installed: " + stdout;
}
}
if (err) {
grunt.log.fail(err);
}
done && done(err ? new Error(err): null);
});
}
checkVersion('npm -v', REQUIRED_NPM_VERSION, 'npm', done);
checkVersion('node -v', REQUIRED_NODE_VERSION, 'node', done);
}

preFlight(function (err) {
if (err) {
grunt.log.fail("############### /!\\ CAUTION /!\\ #################");
grunt.log.fail("PLEASE installed required versions to build CARTO:\n- npm: " + REQUIRED_NPM_VERSION + "\n- node: " + REQUIRED_NODE_VERSION);
grunt.log.fail("#################################################");
process.exit(1);
}
});

var duplicatedModules = duplicatedDependencies(require('./npm-shrinkwrap.json'), SHRINKWRAP_MODULES_TO_VALIDATE);
if (duplicatedModules.length > 0) {
grunt.log.fail("############### /!\\ CAUTION /!\\ #################");
grunt.log.fail("Duplicated dependencies found in npm-shrinkwrap.json file.");
grunt.log.fail(JSON.stringify(duplicatedModules, null, 4));
grunt.log.fail("#################################################");
process.exit(1);
}

var ROOT_ASSETS_DIR = './public/assets/';
var ASSETS_DIR = './public/assets/<%= pkg.version %>';

Expand Down
49 changes: 49 additions & 0 deletions lib/build/tasks/shrinkwrap-duplicated-dependencies.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
function alldeps (mod, deps, name, parentVersion) {
name = name || mod.name;
return Object.keys(mod.dependencies).reduce(function (all, dependency) {
if (!all.hasOwnProperty(dependency)) {
all[dependency] = {};
}

var version = mod.dependencies[dependency].version;
var resolved = mod.dependencies[dependency].resolved;
if (!all[dependency].hasOwnProperty(version)) {
all[dependency][resolved] = {};
}

all[dependency][resolved][name] = parentVersion || version;
if (mod.dependencies[dependency].dependencies) {
alldeps(mod.dependencies[dependency], all, dependency, version);
}
return all;
}, deps || {});
}

/**
* Checks all modules dependencies versions within a npm-shrinkwrap to not be
* duplicated from different parent dependencies.
*
* For instance if there are a couple of dependencies using a different version
* of backbone it will return backbone with its parent dependencies.
*/
function duplicated (shrinkwrap, modulesToValidate) {
shrinkwrap = shrinkwrap || require('./npm-shrinkwrap.json');
var all = alldeps(shrinkwrap);

modulesToValidate = modulesToValidate || Object.keys(all);

return modulesToValidate.reduce(function (duplicatedMods, mod) {
var modVersions = Object.keys(all[mod]);
if (modVersions.length > 1) {
var invalidMod = { name: mod, versions: [] };

modVersions.forEach(function (modVersion) {
invalidMod.versions.push({version: modVersion, from: all[mod][modVersion]});
});
duplicatedMods.push(invalidMod);
}
return duplicatedMods;
}, []);
}

module.exports = duplicated;