mediawiki-extensions-Visual.../Gruntfile.js
Timo Tijhof ec8d31e7ad build: Implement "git-status" task and run it in CI environment
Append this new task to the 'test' sequence in Jenkins (so that
if e.g. buildloader causes dirty diff, the build fails).

Locally this doesn't run by default, but you can mimick the
Jenkins build by running 'grunt ci' instead of 'grunt test'.

Change-Id: I7dd5417777c5a060fd9042248ece695c02c8ab41
2014-06-26 13:27:19 +02:00

114 lines
2.6 KiB
JavaScript

/*!
* Grunt file
*
* @package VisualEditor
*/
/*jshint node:true */
module.exports = function ( grunt ) {
var modules = grunt.file.readJSON( 'lib/ve/build/modules.json' );
grunt.loadNpmTasks( 'grunt-contrib-csslint' );
grunt.loadNpmTasks( 'grunt-contrib-jshint' );
grunt.loadNpmTasks( 'grunt-contrib-watch' );
grunt.loadNpmTasks( 'grunt-banana-checker' );
grunt.loadNpmTasks( 'grunt-jscs-checker' );
grunt.loadTasks( 'lib/ve/build/tasks' );
grunt.loadTasks( 'build/tasks' );
grunt.initConfig( {
pkg: grunt.file.readJSON( 'package.json' ),
jsduckcatconfig: {
main: {
target: '.docs/categories.json',
from: [
'.docs/mw-categories.json',
{
file: 'lib/ve/.docs/categories.json',
aggregate: {
'VisualEditor (core)': [
'General',
'Initialization',
'DataModel',
'ContentEditable',
'User Interface',
'Tests'
]
},
include: [ 'UnicodeJS', 'OOJS UI', 'Upstream' ]
}
]
}
},
buildloader: {
egiframe: {
targetFile: '.docs/eg-iframe.html',
template: '.docs/eg-iframe.html.template',
modules: modules,
load: [ 'visualEditor.desktop.standalone' ],
pathPrefix: 'lib/ve/',
indent: '\t\t'
}
},
jshint: {
options: {
jshintrc: true
},
all: [
'*.js',
'{.docs,build}/**/*.js',
'modules/**/*.js'
]
},
jscs: {
src: '<%= jshint.all %>'
},
csslint: {
options: {
csslintrc: '.csslintrc'
},
all: 'modules/*/**/*.css'
},
banana: {
all: 'modules/ve-{mw,wmf}/i18n/'
},
watch: {
files: [
'.{csslintrc,jscsrc,jshintignore,jshintrc}',
'<%= jshint.all %>',
'<%= csslint.all %>'
],
tasks: 'test'
}
} );
grunt.registerTask( 'git-status', function () {
var done = this.async();
// Are there unstaged changes?
require( 'child_process' ).exec( 'git ls-files --modified', function ( err, stdout, stderr ) {
var ret = err || stderr || stdout;
if ( ret ) {
grunt.log.write( ret );
grunt.log.error( 'Unstaged changes.' );
done( false );
} else {
grunt.log.ok( 'No unstaged changes.' );
done();
}
} );
} );
grunt.registerTask( 'build', [ 'jsduckcatconfig', 'buildloader' ] );
grunt.registerTask( 'lint', [ 'jshint', 'jscs', 'csslint', 'banana' ] );
grunt.registerTask( 'test', [ 'build', 'lint' ] );
grunt.registerTask( 'test-ci', [ 'git-status' ] );
grunt.registerTask( 'default', 'test' );
if ( process.env.JENKINS_HOME ) {
grunt.renameTask( 'test', 'test-internal' );
grunt.registerTask( 'test', [ 'test-internal', 'test-ci' ] );
} else {
grunt.registerTask( 'ci', [ 'test', 'test-ci' ] );
}
};