piskel/Gruntfile.js

328 lines
9.0 KiB
JavaScript
Raw Normal View History

2013-05-27 02:02:48 +04:00
module.exports = function(grunt) {
var ip = 'localhost';
var dateFormat = require('dateformat');
var now = new Date();
var version = '-' + dateFormat(now, "yyyy-mm-dd-hh-MM");
// get the list of scripts paths to include
var piskelScripts = require('./src/piskel-script-list.js').scripts.map(function (path) {
2014-08-22 02:37:35 +04:00
return "src/" + path;
}).filter(function (path) {
return path.indexOf('devtools') === -1;
});
// get the list of styles paths to include
var piskelStyles = require('./src/piskel-style-list.js').styles.map(function (path) {
return "src/" + path;
});
2014-08-22 02:37:35 +04:00
var casperEnvironments = {
'local' : {
2014-08-26 10:21:58 +04:00
suite : './test/casperjs/LocalTestSuite.js',
delay : 50
},
'travis' : {
2014-08-26 10:21:58 +04:00
suite : './test/casperjs/TravisTestSuite.js',
2014-09-13 22:32:01 +04:00
delay : 10000
}
};
var getCasperConfig = function (env) {
var conf = casperEnvironments[env];
var tests = require(conf.suite).tests.map(function (path) {
return "test/casperjs/" + path;
});
2013-08-11 15:37:23 +04:00
return {
filesSrc : tests,
2013-08-11 15:37:23 +04:00
options : {
args : {
baseUrl : 'http://' + ip + ':' + '<%= express.test.options.port %>/',
2013-08-11 15:37:23 +04:00
mode : '?debug',
delay : conf.delay
2013-08-11 15:37:23 +04:00
},
2014-07-23 21:42:08 +04:00
async : false,
2013-08-11 15:37:23 +04:00
direct : false,
logLevel : 'info',
printCommand : false,
printFilePaths : true
}
};
};
2014-07-21 01:55:10 +04:00
var getExpressConfig = function (source, port, host) {
2014-08-22 02:37:35 +04:00
var bases;
if (typeof source === 'string') {
bases = [source];
} else if (Array.isArray(source)) {
bases = source;
}
2014-07-21 01:55:10 +04:00
return {
options: {
port: port,
hostname : host || ip,
2014-08-22 02:37:35 +04:00
bases: bases
2014-07-21 01:55:10 +04:00
}
};
};
2015-04-13 17:30:30 +03:00
// load all grunt tasks
require('load-grunt-tasks')(grunt);
grunt.initConfig({
clean: {
prod: ['dest', 'dest-tmp'],
dev: ['dest-dev', 'dest-tmp']
},
/**
* STYLE CHECKS
*/
leadingIndent : {
options: {
indentation : "spaces"
},
css : ['src/css/**/*.css']
},
jscs : {
options : {
"preset": "google",
"maximumLineLength": 120,
"requireCamelCaseOrUpperCaseIdentifiers": "ignoreProperties",
"validateQuoteMarks": { "mark": "'", "escape": true },
"disallowMultipleVarDecl": "exceptUndefined",
"disallowSpacesInAnonymousFunctionExpression": null
},
js : [ 'src/js/**/*.js' , '!src/js/**/lib/**/*.js' ]
},
jshint: {
options: {
undef : true,
latedef : true,
browser : true,
trailing : true,
curly : true,
2015-04-09 19:24:34 +03:00
globals : {'$':true, 'jQuery' : true, 'pskl':true, 'Events':true, 'Constants':true, 'console' : true, 'module':true, 'require':true, 'Q':true}
},
files: [
'Gruntfile.js',
'package.json',
2014-03-17 00:15:34 +04:00
'src/js/**/*.js',
'!src/js/**/lib/**/*.js' // Exclude lib folder (note the leading !)
]
},
/**
* SERVERS, BROWSER LAUNCHERS
*/
express: {
test: getExpressConfig(['dest-dev', 'test'], 9991),
2014-07-21 01:55:10 +04:00
regular: getExpressConfig('dest', 9001),
debug: getExpressConfig(['dest-dev', 'test'], 9901)
},
open : {
regular : {
path : 'http://' + ip + ':9001/'
},
debug : {
path : 'http://' + ip + ':9901/?debug'
}
},
watch: {
prod: {
files: ['src/**/*.*'],
tasks: ['build'],
options: {
spawn: false
}
},
dev: {
files: ['src/**/*.*'],
tasks: ['build-dev'],
options: {
spawn: false
}
}
},
/**
* BUILD STEPS
*/
sprite:{
all : {
src: 'src/img/icons/**/*.png',
dest: 'src/img/icons.png',
destCss: 'src/css/icons.css'
}
},
concat : {
2013-12-19 02:22:25 +04:00
js : {
options : {
separator : ';'
},
2013-08-11 15:37:23 +04:00
src : piskelScripts,
dest : 'dest/js/piskel-packaged' + version + '.js'
2013-12-19 02:22:25 +04:00
},
css : {
src : piskelStyles,
dest : 'dest/css/piskel-style-packaged' + version + '.css'
}
},
uglify : {
options : {
mangle : true
},
2015-04-13 17:30:30 +03:00
js : {
files : {
'dest-tmp/js/piskel-packaged-min.js' : ['dest/js/piskel-packaged' + version + '.js']
}
}
},
includereplace: {
all: {
src: 'src/index.html',
dest: 'dest-tmp/index.html',
options : {
globals : {
'version' : version
}
}
}
},
replace: {
// main-partial.html is used when embedded in piskelapp.com
mainPartial: {
options: {
patterns: [{
match: /^(.|[\r\n])*<!--body-main-start-->/,
replacement: "",
description : "Remove everything before body-main-start comment"
},{
match: /<!--body-main-end-->(.|[\r\n])*$/,
replacement: "",
description : "Remove everything after body-main-end comment"
},{
match: /([\r\n]) /g,
replacement: "$1",
description : "Decrease indentation by one"
}
]
},
files: [
// src/index.html should already have been moved by the includereplace task
{src: ['dest-tmp/index.html'], dest: 'dest/piskelapp-partials/main-partial.html'}
]
}
},
copy: {
prod: {
files: [
// dest/js/piskel-packaged-min.js should have been created by the uglify task
{src: ['dest-tmp/js/piskel-packaged-min.js'], dest: 'dest/js/piskel-packaged-min' + version + '.js'},
{src: ['dest-tmp/index.html'], dest: 'dest/index.html'},
2014-06-22 00:39:37 +04:00
{src: ['src/logo.png'], dest: 'dest/logo.png'},
{src: ['src/js/lib/gif/gif.ie.worker.js'], dest: 'dest/js/lib/gif/gif.ie.worker.js'},
{expand: true, src: ['img/**'], cwd: 'src/', dest: 'dest/', filter: 'isFile'},
{expand: true, src: ['css/fonts/**'], cwd: 'src/', dest: 'dest/', filter: 'isFile'}
]
},
dev: {
files: [
// in dev copy everything to dest-dev
{src: ['dest-tmp/index.html'], dest: 'dest-dev/index.html'},
{src: ['src/piskel-script-list.js'], dest: 'dest-dev/piskel-script-list.js'},
{src: ['src/piskel-style-list.js'], dest: 'dest-dev/piskel-style-list.js'},
{expand: true, src: ['js/**'], cwd: 'src/', dest: 'dest-dev/', filter: 'isFile'},
{expand: true, src: ['css/**'], cwd: 'src/', dest: 'dest-dev/', filter: 'isFile'},
{expand: true, src: ['img/**'], cwd: 'src/', dest: 'dest-dev/', filter: 'isFile'},
]
}
},
/**
* TESTING
*/
2014-08-14 03:50:33 +04:00
karma: {
unit: {
configFile: 'karma.conf.js'
}
},
ghost : {
'travis' : getCasperConfig('travis'),
'local' : getCasperConfig('local')
},
/**
* DESKTOP BUILDS
*/
nodewebkit: {
windows : {
options: {
version : "0.11.5",
build_dir: './dest/desktop/', // destination folder of releases.
win: true,
linux32: true,
linux64: true
},
src: ['./dest/**/*', "./package.json", "!./dest/desktop/"]
},
macos : {
options: {
platforms : ['osx64'],
// had performance issues with 0.11.5 on mac os, need to test new versions/new hardware
version : "0.10.5",
build_dir: './dest/desktop/'
},
src: ['./dest/**/*', "./package.json", "!./dest/desktop/"]
}
}
});
2013-05-27 01:58:59 +04:00
2013-08-11 22:51:04 +04:00
// Validate
grunt.registerTask('lint', ['jscs:js', 'leadingIndent:css', 'jshint']);
2013-05-27 01:58:59 +04:00
2014-08-14 03:50:33 +04:00
// karma/unit-tests task
grunt.registerTask('unit-test', ['karma']);
// Validate & Test
grunt.registerTask('test-travis', ['lint', 'unit-test', 'build-dev', 'express:test', 'ghost:travis']);
2013-08-11 22:51:04 +04:00
// Validate & Test (faster version) will NOT work on travis !!
grunt.registerTask('test-local', ['lint', 'unit-test', 'build-dev', 'express:test', 'ghost:local']);
grunt.registerTask('test-local-nolint', ['unit-test', 'build-dev', 'express:test', 'ghost:local']);
grunt.registerTask('test', ['test-travis']);
grunt.registerTask('precommit', ['test-local']);
grunt.registerTask('build-index.html', ['includereplace']);
grunt.registerTask('merge-statics', ['concat:js', 'concat:css', 'uglify']);
grunt.registerTask('build', ['clean:prod', 'sprite', 'merge-statics', 'build-index.html', 'replace', 'copy:prod']);
grunt.registerTask('build-dev', ['clean:dev', 'sprite', 'build-index.html', 'copy:dev']);
2013-12-19 02:22:25 +04:00
2013-08-11 22:51:04 +04:00
// Validate & Build
grunt.registerTask('default', ['lint', 'build']);
2013-08-11 22:51:04 +04:00
// Build stand alone app with nodewebkit
2015-08-15 17:29:13 +03:00
grunt.registerTask('desktop', ['default', 'nodewebkit:windows']);
grunt.registerTask('desktop-mac', ['default', 'nodewebkit:macos']);
// Start webserver and watch for changes
grunt.registerTask('serve', ['build', 'express:regular', 'open:regular', 'watch:prod']);
// Start webserver on src folder, in debug mode
grunt.registerTask('serve-debug', ['build-dev', 'express:debug', 'open:debug', 'watch:dev']);
2015-04-26 23:01:06 +03:00
grunt.registerTask('play', ['serve-debug']);
2013-05-27 02:02:48 +04:00
};