216 lines
5.5 KiB
JavaScript
216 lines
5.5 KiB
JavaScript
|
||
/**
|
||
* Grunfile runner file for CartoDB.js
|
||
* framework
|
||
*
|
||
*/
|
||
module.exports = function(grunt) {
|
||
|
||
require('load-grunt-tasks')(grunt);
|
||
require('time-grunt')(grunt);
|
||
var semver = require('semver');
|
||
|
||
var pkg = grunt.file.readJSON('package.json');
|
||
|
||
if (!pkg.version || !semver.valid(pkg.version)) {
|
||
grunt.fail.fatal('package.json version is not valid' , 1);
|
||
}
|
||
|
||
var version = pkg.version.split('.');
|
||
var VERSION_OBJ = {
|
||
major: version[0],
|
||
minor: version[0] + '.' + version[1],
|
||
bugfixing: pkg.version
|
||
}
|
||
|
||
var config = {
|
||
dist: 'dist',
|
||
app: 'www',
|
||
version: {
|
||
major: version[0],
|
||
minor: version[0] + '.' + version[1],
|
||
bugfixing: pkg.version
|
||
},
|
||
pkg: pkg
|
||
};
|
||
|
||
grunt.initConfig({
|
||
secrets: {},
|
||
config: config,
|
||
dist: 'dist',
|
||
app: 'www',
|
||
version: {
|
||
major: version[0],
|
||
minor: version[0] + '.' + version[1],
|
||
bugfixing: pkg.version
|
||
},
|
||
pkg: pkg,
|
||
gitinfo: {},
|
||
s3: require('./grunt/tasks/s3').task(grunt, config),
|
||
prompt: require('./grunt/tasks/prompt').task(grunt, config),
|
||
replace: require('./grunt/tasks/replace').task(grunt, config),
|
||
fastly: require('./grunt/tasks/fastly').task(grunt, config),
|
||
watch: require('./grunt/tasks/watch').task(),
|
||
connect: require('./grunt/tasks/connect').task(config),
|
||
clean: require('./grunt/tasks/clean').task(),
|
||
compass: require('./grunt/tasks/compass').task(),
|
||
autoprefixer: require('./grunt/tasks/autoprefixer').task(),
|
||
useminPrepare: require('./grunt/tasks/useminPrepare').task(),
|
||
usemin: require('./grunt/tasks/usemin').task(),
|
||
htmlmin: require('./grunt/tasks/htmlmin').task(),
|
||
concat: require('./grunt/tasks/concat').task(grunt, config),
|
||
uglify: require('./grunt/tasks/uglify').task(),
|
||
cssmin: require('./grunt/tasks/cssmin').task(),
|
||
imagemin: require('./grunt/tasks/imagemin').task(),
|
||
svgmin: require('./grunt/tasks/svgmin').task(),
|
||
copy: require('./grunt/tasks/copy').task(grunt, config),
|
||
filerev: require('./grunt/tasks/filerev').task(),
|
||
buildcontrol: require('./grunt/tasks/buildcontrol').task(),
|
||
jshint: require('./grunt/tasks/jshint').task(),
|
||
csslint: require('./grunt/tasks/csslint').task(),
|
||
concurrent: require('./grunt/tasks/concurrent').task(),
|
||
jasmine: require('./grunt/tasks/jasmine').task()
|
||
});
|
||
|
||
|
||
/* TASKS */
|
||
|
||
grunt.registerTask('serve', function (target) {
|
||
if (target === 'dist') {
|
||
return grunt.task.run(['build', 'connect:dist:keepalive']);
|
||
}
|
||
|
||
grunt.task.run([
|
||
'clean:server',
|
||
'concurrent:server',
|
||
'autoprefixer:server',
|
||
'copy:stageStatic',
|
||
'connect:livereload',
|
||
'watch'
|
||
]);
|
||
});
|
||
|
||
grunt.registerTask('server', function (target) {
|
||
grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.');
|
||
grunt.task.run([target ? ('serve:' + target) : 'serve']);
|
||
});
|
||
|
||
grunt.registerTask('check', [
|
||
'clean:server',
|
||
'compass:server',
|
||
'jshint:all',
|
||
'csslint:check'
|
||
]);
|
||
|
||
grunt.registerTask('test', [ 'jasmine' ]);
|
||
|
||
grunt.registerTask('release', [
|
||
'prompt:bump',
|
||
'build'
|
||
]);
|
||
|
||
grunt.registerTask('publish', function (target) {
|
||
|
||
if (!grunt.file.exists('secrets.json')) {
|
||
grunt.fail.fatal('secrets.json file does not exist, copy secrets.example.json and rename it' , 1);
|
||
}
|
||
|
||
// Read secrets
|
||
grunt.config.set('secrets', grunt.file.readJSON('secrets.json'));
|
||
|
||
if (
|
||
!grunt.config('secrets') ||
|
||
!grunt.config('secrets').S3_KEY ||
|
||
!grunt.config('secrets').S3_SECRET ||
|
||
!grunt.config('secrets').S3_BUCKET
|
||
) {
|
||
grunt.fail.fatal('S3 keys not specified in secrets.json' , 1);
|
||
}
|
||
|
||
grunt.task.run([
|
||
'jasmine', // Don't comment this line unless you have a GOOD REASON
|
||
's3'
|
||
]);
|
||
});
|
||
|
||
grunt.registerTask('set_current_version', function() {
|
||
var version = pkg.version;
|
||
var minor = version.split('.');
|
||
minor.pop()
|
||
minor = minor.join('.');
|
||
var options = {
|
||
version: version,
|
||
minor: minor,
|
||
increment: 'build',
|
||
bugfixing: version
|
||
};
|
||
|
||
// Check if version was set via prompt, and
|
||
// use that version and not the package version
|
||
var bump = grunt.config.get('bump');
|
||
if (bump) {
|
||
options = bump;
|
||
options.bugfixing = bump.version;
|
||
}
|
||
|
||
grunt.config.set('bump', options);
|
||
});
|
||
|
||
grunt.registerTask('invalidate', function(){
|
||
if (!grunt.file.exists('secrets.json')) {
|
||
grunt.fail.fatal('secrets.json file does not exist, copy secrets.example.json and rename it' , 1);
|
||
}
|
||
|
||
// Read secrets
|
||
grunt.config.set('secrets', grunt.file.readJSON('secrets.json'));
|
||
|
||
if (!grunt.config('secrets') ||
|
||
!grunt.config('secrets').FASTLY_API_KEY ||
|
||
!grunt.config('secrets').FASTLY_CARTODB_SERVICE
|
||
) {
|
||
grunt.fail.fatal('Fastly keys not specified in secrets.json' , 1);
|
||
}
|
||
|
||
grunt.task.run([
|
||
'fastly'
|
||
]);
|
||
});
|
||
|
||
grunt.registerTask('pages', [ 'buildcontrol:pages' ]);
|
||
|
||
grunt.registerTask('build', [
|
||
'dist_js',
|
||
'useminPrepare',
|
||
'cssmin',
|
||
'imagemin',
|
||
'svgmin',
|
||
'filerev',
|
||
'usemin',
|
||
'htmlmin',
|
||
'uglify'
|
||
]);
|
||
|
||
grunt.registerTask('dist_js', [
|
||
'set_current_version',
|
||
'js'
|
||
])
|
||
|
||
grunt.registerTask('js', [
|
||
'replace',
|
||
'gitinfo',
|
||
'clean:dist',
|
||
'concurrent:dist',
|
||
'concat',
|
||
'autoprefixer:dist'
|
||
]);
|
||
|
||
grunt.registerTask('dist', [
|
||
'set_current_version',
|
||
'build'
|
||
]);
|
||
|
||
grunt.registerTask('default', [
|
||
'dist'
|
||
]);
|
||
}
|