chore(travis): speed up the build

- parallelize the tasks
- cache requests (e2e tests)

This reduces the time from ~18min to ~12min.

It makes the output little messy. We could buffer output of each task and display it once it's fully finished, nicely. I think giving instant feedback is better.
This commit is contained in:
Vojta Jina 2013-07-01 16:21:56 -07:00
parent 6e1b64176f
commit 2c2adbcab5
5 changed files with 61 additions and 6 deletions

View file

@ -13,8 +13,7 @@ before_script:
- ./lib/sauce/sauce_connect_setup.sh
- npm install -g grunt-cli
- grunt package
- grunt webserver > /dev/null &
- ./lib/sauce/sauce_connect_block.sh
script:
- grunt test --reporters dots --browsers SL_Chrome
- grunt parallel:travis --reporters dots --browsers SL_Chrome

View file

@ -9,6 +9,7 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-compress');
grunt.loadNpmTasks('grunt-contrib-jasmine-node');
grunt.loadNpmTasks('grunt-shell');
grunt.loadNpmTasks('grunt-parallel');
grunt.loadTasks('lib/grunt');
var NG_VERSION = util.getVersion();
@ -23,6 +24,21 @@ module.exports = function(grunt) {
grunt.initConfig({
NG_VERSION: NG_VERSION,
parallel: {
travis: {
options: {
stream: true,
},
tasks: [
util.parallelTask('test:docs'),
util.parallelTask('test:modules'),
util.parallelTask('test:jquery'),
util.parallelTask('test:jqlite'),
util.parallelTask('test:e2e')
]
}
},
connect: {
devserver: {
options: {
@ -42,7 +58,24 @@ module.exports = function(grunt) {
}
}
},
testserver: {}
testserver: {
options: {
middleware: function(connect, options){
return [
function(req, resp, next) {
// cache get requests to speed up tests on travis
if (req.method === 'GET') {
resp.setHeader('Cache-control', 'public, max-age=3600');
}
next();
},
connect.favicon('images/favicon.ico'),
connect.static(options.base)
];
}
}
}
},

View file

@ -5,6 +5,7 @@ module.exports = function(config) {
logLevel: config.LOG_INFO,
logColors: true,
browsers: ['Chrome'],
runnerPort: 0,
// config for Travis CI
sauceLabs: {

View file

@ -36,11 +36,13 @@ module.exports = {
var browsers = grunt.option('browsers');
var reporters = grunt.option('reporters');
var noColor = grunt.option('no-colors');
var port = grunt.option('port');
var p = spawn('node', ['node_modules/karma/bin/karma', 'start', config,
singleRun ? '--single-run=true' : '',
reporters ? '--reporters=' + reporters : '',
browsers ? '--browsers=' + browsers : '',
noColor ? '--no-colors' : ''
noColor ? '--no-colors' : '',
port ? '--port=' + port : ''
]);
p.stdout.pipe(process.stdout);
p.stderr.pipe(process.stderr);
@ -235,5 +237,24 @@ module.exports = {
}
next();
};
}
},
parallelTask: function(name) {
var args = [name, '--port=' + this.lastParallelTaskPort];
if (grunt.option('browsers')) {
args.push('--browsers=' + grunt.option('browsers'));
}
if (grunt.option('reporters')) {
args.push('--reporters=' + grunt.option('reporters'));
}
this.lastParallelTaskPort++;
return {grunt: true, args: args};
},
lastParallelTaskPort: 9876
};

View file

@ -27,7 +27,8 @@
"yaml-js": "0.0.5",
"showdown": "0.3.1",
"rewire": "1.1.3",
"grunt-contrib-jasmine-node": "~0.1.1"
"grunt-contrib-jasmine-node": "~0.1.1",
"grunt-parallel": "~0.2.0"
},
"licenses": [
{