|
|
|
@ -48,9 +48,7 @@ function isRunningTask (taskName, grunt) {
|
|
|
|
|
/**
|
|
|
|
|
* CartoDB UI assets generation
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
module.exports = function(grunt) {
|
|
|
|
|
|
|
|
|
|
if (timer) timer.init(grunt);
|
|
|
|
|
|
|
|
|
|
var environment = grunt.option('environment') || DEVELOPMENT;
|
|
|
|
@ -82,8 +80,8 @@ module.exports = function(grunt) {
|
|
|
|
|
logFn && logFn(err ? new Error(err): null);
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
checkVersion('node -v', requiredNodeVersion, 'node', logFn);
|
|
|
|
|
checkVersion('npm -v', requiredNpmVersion, 'npm', logFn);
|
|
|
|
|
// checkVersion('node -v', requiredNodeVersion, 'node', logFn);
|
|
|
|
|
// checkVersion('npm -v', requiredNpmVersion, 'npm', logFn);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var mustCheckNodeVersion = grunt.option('no-node-checker');
|
|
|
|
@ -117,9 +115,12 @@ module.exports = function(grunt) {
|
|
|
|
|
var ROOT_ASSETS_DIR = './public/assets/';
|
|
|
|
|
var ASSETS_DIR = './public/assets/<%= pkg.version %>';
|
|
|
|
|
|
|
|
|
|
// use grunt --environment production
|
|
|
|
|
/**
|
|
|
|
|
* `grunt --environment=production`
|
|
|
|
|
*/
|
|
|
|
|
var env = './config/grunt_' + environment + '.json';
|
|
|
|
|
grunt.log.writeln('env: ' + env);
|
|
|
|
|
|
|
|
|
|
if (grunt.file.exists(env)) {
|
|
|
|
|
env = grunt.file.readJSON(env)
|
|
|
|
|
} else {
|
|
|
|
@ -170,10 +171,14 @@ module.exports = function(grunt) {
|
|
|
|
|
|
|
|
|
|
connect: require('./lib/build/tasks/connect.js').task(),
|
|
|
|
|
|
|
|
|
|
availabletasks: require('./lib/build/tasks/availabletasks.js').task()
|
|
|
|
|
availabletasks: require('./lib/build/tasks/availabletasks.js').task(),
|
|
|
|
|
|
|
|
|
|
sass: require('./lib/build/tasks/sass.js').task()
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// $ grunt availabletasks
|
|
|
|
|
/**
|
|
|
|
|
* `grunt availabletasks`
|
|
|
|
|
*/
|
|
|
|
|
grunt.loadNpmTasks('grunt-available-tasks');
|
|
|
|
|
|
|
|
|
|
// Load Grunt tasks
|
|
|
|
@ -183,20 +188,7 @@ module.exports = function(grunt) {
|
|
|
|
|
|
|
|
|
|
require('./lib/build/tasks/manifest').register(grunt, ASSETS_DIR);
|
|
|
|
|
|
|
|
|
|
// builds cdb
|
|
|
|
|
grunt.registerTask('cdb', "builds cartodb.js", function() {
|
|
|
|
|
var done = this.async();
|
|
|
|
|
require("child_process").exec('make update_cdb', function (error, stdout, stderr) {
|
|
|
|
|
if (error) {
|
|
|
|
|
grunt.log.fail('cartodb.js not updated (due to '+ stdout +", "+ stderr +")");
|
|
|
|
|
} else {
|
|
|
|
|
grunt.log.ok('cartodb.js updated');
|
|
|
|
|
}
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('invalidate', "invalidate cache", function() {
|
|
|
|
|
grunt.registerTask('invalidate', 'invalidate cache', function() {
|
|
|
|
|
var done = this.async();
|
|
|
|
|
var url = require('url');
|
|
|
|
|
var https = require('https');
|
|
|
|
@ -222,25 +214,26 @@ module.exports = function(grunt) {
|
|
|
|
|
}).end();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('config', "generates assets config for current configuration", function() {
|
|
|
|
|
grunt.registerTask('config', 'generates assets config for current configuration', function() {
|
|
|
|
|
// Set assets url for static assets in our app
|
|
|
|
|
var config = grunt.template.process("cdb.config.set('assets_url', '<%= env.http_path_prefix %>/assets/<%= pkg.version %>');");
|
|
|
|
|
config += grunt.template.process("\nconsole.log('cartodbui v<%= pkg.version %>');");
|
|
|
|
|
grunt.file.write("lib/build/app_config.js", config);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('check_release', "checks release can be done", function() {
|
|
|
|
|
grunt.registerTask('check_release', 'checks release can be done', function() {
|
|
|
|
|
if (environment === DEVELOPMENT) {
|
|
|
|
|
grunt.log.error("you can't release running development environment");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
grunt.log.ok("************************************************");
|
|
|
|
|
grunt.log.ok(" you are going to deploy to " + env );
|
|
|
|
|
grunt.log.ok("************************************************");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.event.on('watch', function(action, filepath, subtask) {
|
|
|
|
|
// configure copy vendor to only run on changed file
|
|
|
|
|
// Configure copy vendor to only run on changed file
|
|
|
|
|
var cfg = grunt.config.get('copy.vendor');
|
|
|
|
|
if (filepath.indexOf(cfg.cwd) !== -1) {
|
|
|
|
|
grunt.config('copy.vendor.src', filepath.replace(cfg.cwd, ''));
|
|
|
|
@ -249,17 +242,13 @@ module.exports = function(grunt) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var builderFiles = [
|
|
|
|
|
'js_core_cartodb3',
|
|
|
|
|
'js_client_cartodb3',
|
|
|
|
|
'js_test_spec_core_cartodb3',
|
|
|
|
|
'js_test_spec_client_cartodb3'
|
|
|
|
|
'js_cartodb3',
|
|
|
|
|
'js_test_spec_cartodb3'
|
|
|
|
|
];
|
|
|
|
|
var otherFiles = [
|
|
|
|
|
'app',
|
|
|
|
|
'js_core_cartodb',
|
|
|
|
|
'js_client_cartodb',
|
|
|
|
|
'js_test_jasmine_core_cartodb3',
|
|
|
|
|
'js_test_jasmine_client_cartodb3'
|
|
|
|
|
'js_cartodb',
|
|
|
|
|
'js_test_jasmine_cartodb3'
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
var COPY_PATHS = [];
|
|
|
|
@ -269,7 +258,7 @@ module.exports = function(grunt) {
|
|
|
|
|
COPY_PATHS = COPY_PATHS.concat(otherFiles).concat(builderFiles);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// configure copy paths to only run on changed files
|
|
|
|
|
// Configure copy paths to only run on changed files
|
|
|
|
|
for (var j = 0, m = COPY_PATHS.length; j < m; ++j) {
|
|
|
|
|
var copy_path = COPY_PATHS[j];
|
|
|
|
|
var files = grunt.config.get('copy.' + copy_path + '.files');
|
|
|
|
@ -284,10 +273,154 @@ module.exports = function(grunt) {
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('css', [
|
|
|
|
|
'copy:vendor',
|
|
|
|
|
'copy:app',
|
|
|
|
|
'compass',
|
|
|
|
|
'sass',
|
|
|
|
|
// TODO: migrate mixins to postcss
|
|
|
|
|
// 'postcss',
|
|
|
|
|
'concat:css'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('run_browserify', 'Browserify task with options', function (option) {
|
|
|
|
|
var skipEditor = false;
|
|
|
|
|
var skipBuilder = false;
|
|
|
|
|
var skipAllSpecs = false;
|
|
|
|
|
var skipEditorSpecs = false;
|
|
|
|
|
var skipBuilderSpecs = false;
|
|
|
|
|
|
|
|
|
|
if (environment === DEVELOPMENT) {
|
|
|
|
|
if (!isRunningTask('test', grunt)) {
|
|
|
|
|
grunt.log.writeln('Skipping only Builder specs generation by browserify because we are not running the `test` task.');
|
|
|
|
|
skipBuilderSpecs = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (option === 'builder') {
|
|
|
|
|
grunt.log.writeln('Skipping Editor assets and specs generation by browserify because we are running the `dev` task.');
|
|
|
|
|
skipEditor = true;
|
|
|
|
|
skipEditorSpecs = true;
|
|
|
|
|
} else {
|
|
|
|
|
grunt.log.writeln('Skipping Builder assets generation by browserify because we are running the `dev` task later.');
|
|
|
|
|
skipBuilder = true;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
grunt.log.writeln('Skipping all specs generation by browserify because not in development environment.');
|
|
|
|
|
skipAllSpecs = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (skipEditor) {
|
|
|
|
|
delete grunt.config.data.browserify['explore'];
|
|
|
|
|
delete grunt.config.data.browserify['user_feed'];
|
|
|
|
|
delete grunt.config.data.browserify['account'];
|
|
|
|
|
delete grunt.config.data.browserify['confirmation'];
|
|
|
|
|
delete grunt.config.data.browserify['editor'];
|
|
|
|
|
delete grunt.config.data.browserify['dashboard'];
|
|
|
|
|
delete grunt.config.data.browserify['keys'];
|
|
|
|
|
delete grunt.config.data.browserify['new_public_table'];
|
|
|
|
|
delete grunt.config.data.browserify['organization'];
|
|
|
|
|
delete grunt.config.data.browserify['public_dashboard'];
|
|
|
|
|
delete grunt.config.data.browserify['data_library'];
|
|
|
|
|
delete grunt.config.data.browserify['public_map'];
|
|
|
|
|
delete grunt.config.data.browserify['mobile_apps'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (skipBuilder) {
|
|
|
|
|
delete grunt.config.data.browserify['vendor_editor3'];
|
|
|
|
|
delete grunt.config.data.browserify['common_editor3'];
|
|
|
|
|
delete grunt.config.data.browserify['dataset'];
|
|
|
|
|
delete grunt.config.data.browserify['editor3'];
|
|
|
|
|
delete grunt.config.data.browserify['public_editor3'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (skipAllSpecs) {
|
|
|
|
|
delete grunt.config.data.browserify['test_specs_for_browserify_modules'];
|
|
|
|
|
delete grunt.config.data.browserify['cartodb3-specs'];
|
|
|
|
|
} else if (skipEditorSpecs) {
|
|
|
|
|
delete grunt.config.data.browserify['test_specs_for_browserify_modules'];
|
|
|
|
|
} else if (skipBuilderSpecs) {
|
|
|
|
|
delete grunt.config.data.browserify['cartodb3-specs'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
grunt.task.run('browserify');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('cdb', 'builds cartodb.js', function() {
|
|
|
|
|
var done = this.async();
|
|
|
|
|
|
|
|
|
|
require('child_process').exec('make update_cdb', function (error, stdout, stderr) {
|
|
|
|
|
if (error) {
|
|
|
|
|
grunt.log.fail('cartodb.js not updated (due to '+ stdout + ', ' + stderr + ')');
|
|
|
|
|
} else {
|
|
|
|
|
grunt.log.ok('cartodb.js updated');
|
|
|
|
|
}
|
|
|
|
|
done();
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('copy_builder', 'Multitask with all the tasks responsible for copying builder files.', [
|
|
|
|
|
'copy:locale',
|
|
|
|
|
'copy:js_cartodb3',
|
|
|
|
|
'copy:js_test_spec_cartodb3'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('js', [
|
|
|
|
|
'cdb',
|
|
|
|
|
'copy_builder',
|
|
|
|
|
'copy:js_cartodb',
|
|
|
|
|
'copy:js_test_jasmine_cartodb3',
|
|
|
|
|
'run_browserify',
|
|
|
|
|
'concat:js',
|
|
|
|
|
'jst'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('prepare', [
|
|
|
|
|
'clean',
|
|
|
|
|
'config',
|
|
|
|
|
'js'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* `grunt` default task to compile Editor assets, builder assets will be compiled by `grunt dev` task.
|
|
|
|
|
* `grunt --environment=production` default task to compile Builder and Editor assets.
|
|
|
|
|
*/
|
|
|
|
|
grunt.registerTask('default', [
|
|
|
|
|
'prepare',
|
|
|
|
|
'css',
|
|
|
|
|
'manifest'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('run_watch', 'All watch tasks except those that watch spec changes', function (option) {
|
|
|
|
|
if (option === 'builder_specs=false') {
|
|
|
|
|
delete grunt.config.data.watch.js_test_spec_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_test_jasmine_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_affected;
|
|
|
|
|
}
|
|
|
|
|
grunt.task.run('watch');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('build-jasmine-specrunners', _.chain(jasmineCfg)
|
|
|
|
|
.keys()
|
|
|
|
|
.map(function (name) {
|
|
|
|
|
return ['jasmine', name, 'build'].join(':');
|
|
|
|
|
})
|
|
|
|
|
.value());
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('setConfig', 'Set a config property', function(name, val) {
|
|
|
|
|
grunt.config.set(name, val);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* `grunt dev` compile and watch Builder assets.
|
|
|
|
|
*/
|
|
|
|
|
grunt.registerTask('dev', 'Frontend development task (watch JS/CSS changes)', [
|
|
|
|
|
'setConfig:env.browserify_watch:true',
|
|
|
|
|
'run_browserify:builder',
|
|
|
|
|
'build-jasmine-specrunners',
|
|
|
|
|
// 'connect:server',
|
|
|
|
|
// 'run_watch:builder_specs=false'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// still have to use this custom task because registerCmdTask outputs tons of warnings like:
|
|
|
|
|
// path/to/some/ignored/files:0:0: File ignored because of your .eslintignore file. Use --no-ignore to override.
|
|
|
|
|
grunt.registerTask('lint', 'lint source files', function () {
|
|
|
|
@ -308,62 +441,17 @@ module.exports = function(grunt) {
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('pre_client', [
|
|
|
|
|
'copy:locale_core',
|
|
|
|
|
'copy:locale_client',
|
|
|
|
|
'copy:js_core_cartodb',
|
|
|
|
|
'copy:js_client_cartodb',
|
|
|
|
|
'copy:js_core_cartodb3',
|
|
|
|
|
'copy:js_client_cartodb3',
|
|
|
|
|
'copy:js_test_spec_core_cartodb3',
|
|
|
|
|
'copy:js_test_spec_client_cartodb3',
|
|
|
|
|
'copy:js_test_jasmine_core_cartodb3',
|
|
|
|
|
'copy:js_test_jasmine_client_cartodb3'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('js', ['cdb', 'pre_client', 'run_browserify', 'concat:js', 'jst']);
|
|
|
|
|
grunt.registerTask('pre_default', ['clean', 'config', 'js']);
|
|
|
|
|
/**
|
|
|
|
|
* `grunt test`
|
|
|
|
|
*/
|
|
|
|
|
grunt.registerTask('test', '(CI env) Re-build JS files and run all tests. For manual testing use `grunt jasmine` directly', [
|
|
|
|
|
'pre_default',
|
|
|
|
|
'prepare',
|
|
|
|
|
'jasmine:cartodbui',
|
|
|
|
|
'jasmine:cartodb3',
|
|
|
|
|
'lint'
|
|
|
|
|
]);
|
|
|
|
|
grunt.registerTask('editor3', [
|
|
|
|
|
'browserify:vendor_editor3',
|
|
|
|
|
'browserify:common_editor3',
|
|
|
|
|
'browserify:editor3',
|
|
|
|
|
'browserify:public_editor3'
|
|
|
|
|
]);
|
|
|
|
|
grunt.registerTask('css_editor_3', [
|
|
|
|
|
'copy:cartofonts',
|
|
|
|
|
'copy:iconfont',
|
|
|
|
|
'copy:cartoassets',
|
|
|
|
|
'copy:perfect_scrollbar',
|
|
|
|
|
'copy:colorpicker',
|
|
|
|
|
'copy:deep_insights',
|
|
|
|
|
'copy:cartodbjs_v4'
|
|
|
|
|
]);
|
|
|
|
|
grunt.registerTask('css', ['copy:vendor', 'css_editor_3', 'copy:app', 'compass', 'concat:css']);
|
|
|
|
|
grunt.registerTask('default', ['pre_default', 'css', 'manifest']);
|
|
|
|
|
grunt.registerTask('minimize', ['default', 'copy:js', 'exorcise', 'uglify']);
|
|
|
|
|
grunt.registerTask('release', ['check_release', 'minimize', 's3', 'invalidate']);
|
|
|
|
|
grunt.registerTask('build-jasmine-specrunners', _
|
|
|
|
|
.chain(jasmineCfg)
|
|
|
|
|
.keys()
|
|
|
|
|
.map(function (name) {
|
|
|
|
|
return ['jasmine', name, 'build'].join(':');
|
|
|
|
|
})
|
|
|
|
|
.value());
|
|
|
|
|
grunt.registerTask('dev', 'Typical task for frontend development (watch JS/CSS changes)', [
|
|
|
|
|
'setConfig:env.browserify_watch:true',
|
|
|
|
|
'run_browserify',
|
|
|
|
|
'build-jasmine-specrunners',
|
|
|
|
|
'connect:server',
|
|
|
|
|
'run_watch:builder_specs=false']);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('sourcemaps',
|
|
|
|
|
'generate sourcemaps, to be used w/ trackjs.com for bughunting', [
|
|
|
|
|
grunt.registerTask('sourcemaps', 'generate sourcemaps, to be used w/ trackjs.com for bughunting', [
|
|
|
|
|
'setConfig:assets_dir:./tmp/sourcemaps',
|
|
|
|
|
'config',
|
|
|
|
|
'js',
|
|
|
|
@ -372,49 +460,22 @@ module.exports = function(grunt) {
|
|
|
|
|
'uglify'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('run_watch', 'All watch tasks except those that watch spec changes', function (option) {
|
|
|
|
|
if (option === 'builder_specs=false') {
|
|
|
|
|
delete grunt.config.data.watch.js_test_spec_core_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_test_spec_client_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_test_jasmine_core_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_test_jasmine_client_cartodb3;
|
|
|
|
|
delete grunt.config.data.watch.js_affected;
|
|
|
|
|
}
|
|
|
|
|
grunt.task.run('watch');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('run_browserify', 'Browserify task with options', function (option) {
|
|
|
|
|
var skipAllSpecs = false;
|
|
|
|
|
var skipBuilderSpecs = false;
|
|
|
|
|
|
|
|
|
|
if (environment !== DEVELOPMENT) {
|
|
|
|
|
grunt.log.writeln('Skipping all specs generation by browserify because not in development environment.');
|
|
|
|
|
skipAllSpecs = true;
|
|
|
|
|
} else if (!isRunningTask('test', grunt)) {
|
|
|
|
|
grunt.log.writeln('Skipping only Builder specs generation by browserify because we are not running the `test` task.');
|
|
|
|
|
skipBuilderSpecs = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (skipAllSpecs) {
|
|
|
|
|
delete grunt.config.data.browserify['test_specs_for_browserify_modules'];
|
|
|
|
|
delete grunt.config.data.browserify['cartodb3-specs'];
|
|
|
|
|
} else if (skipBuilderSpecs) {
|
|
|
|
|
delete grunt.config.data.browserify['cartodb3-specs'];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
grunt.task.run('browserify');
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('copy_builder', 'Multitask with all the tasks responsible for copying builder files.', [
|
|
|
|
|
'copy:locale_core',
|
|
|
|
|
'copy:locale_client',
|
|
|
|
|
'copy:js_core_cartodb3',
|
|
|
|
|
'copy:js_client_cartodb3',
|
|
|
|
|
'copy:js_test_spec_core_cartodb3',
|
|
|
|
|
'copy:js_test_spec_client_cartodb3'
|
|
|
|
|
grunt.registerTask('minimize', [
|
|
|
|
|
'default',
|
|
|
|
|
'copy:js',
|
|
|
|
|
'exorcise',
|
|
|
|
|
'uglify'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// Affected specs section - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
|
/**
|
|
|
|
|
* `grunt release`
|
|
|
|
|
*/
|
|
|
|
|
grunt.registerTask('release', [
|
|
|
|
|
'check_release',
|
|
|
|
|
'minimize',
|
|
|
|
|
's3',
|
|
|
|
|
'invalidate'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
grunt.registerTask('affected', 'Generate only affected specs', function () {
|
|
|
|
|
requireWebpackTask().affected.call(this, grunt);
|
|
|
|
@ -442,8 +503,6 @@ module.exports = function(grunt) {
|
|
|
|
|
'watch:js_affected'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
// / Affected specs section - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Delegate task to command line.
|
|
|
|
|
* @param {String} name - If taskname starts with npm it's run a npm script (i.e. `npm run foobar`
|
|
|
|
|