react/Gruntfile.js

276 lines
8.7 KiB
JavaScript
Raw Normal View History

2013-05-30 03:46:11 +08:00
'use strict';
var jsxTask = require('./grunt/tasks/jsx');
var browserifyTask = require('./grunt/tasks/browserify');
var populistTask = require('./grunt/tasks/populist');
var webdriverPhantomJSTask = require('./grunt/tasks/webdriver-phantomjs');
2013-11-07 04:11:00 +08:00
var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
2013-11-08 03:57:53 +08:00
var sauceTunnelTask = require('./grunt/tasks/sauce-tunnel');
var npmTask = require('./grunt/tasks/npm');
2013-05-30 03:46:11 +08:00
var releaseTasks = require('./grunt/tasks/release');
var npmReactTasks = require('./grunt/tasks/npm-react');
var npmReactToolsTasks = require('./grunt/tasks/npm-react-tools');
var versionCheckTask = require('./grunt/tasks/version-check');
var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
2013-05-30 03:46:11 +08:00
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
copy: require('./grunt/config/copy'),
jsx: require('./grunt/config/jsx'),
browserify: require('./grunt/config/browserify'),
2014-04-12 19:05:30 +08:00
populist: require('./grunt/config/populist')(grunt),
connect: require('./grunt/config/server')(grunt),
2013-12-17 13:25:05 +08:00
"webdriver-jasmine": require('./grunt/config/webdriver-jasmine'),
"webdriver-perf": require('./grunt/config/webdriver-perf'),
npm: require('./grunt/config/npm'),
2013-11-15 02:37:07 +08:00
clean: ['./build', './*.gem', './docs/_site', './examples/shared/*.js', '.module-cache'],
2013-05-30 03:46:11 +08:00
jshint: require('./grunt/config/jshint'),
compare_size: require('./grunt/config/compare_size')
2013-05-30 03:46:11 +08:00
});
grunt.config.set('compress', require('./grunt/config/compress'));
2013-11-07 06:12:20 +08:00
Object.keys(grunt.file.readJSON('package.json').devDependencies)
.filter(function(npmTaskName) { return npmTaskName.indexOf('grunt-') === 0; })
.filter(function(npmTaskName) { return npmTaskName != 'grunt-cli'; })
.forEach(function(npmTaskName) { grunt.loadNpmTasks(npmTaskName); });
2013-05-30 03:46:11 +08:00
// Super simplified eslint task that we can use to replace linting. This just
// shells out to eslint.
grunt.registerTask('eslint', function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node_modules/.bin/eslint',
args: ['src']
}, function(err, result, code) {
if (code === 0) {
grunt.log.ok('Lint passed (but may contain warnings)');
} else {
grunt.log.error('Lint failed');
}
if (result.stdout.length) {
grunt.log.writeln(result.stdout);
}
done(code === 0);
});
});
grunt.registerTask('lint', ['eslint']);
2013-05-30 03:46:11 +08:00
2013-12-17 13:25:05 +08:00
grunt.registerTask('download-previous-version', require('./grunt/tasks/download-previous-version.js'));
grunt.registerTask('delete-build-modules', function() {
if (grunt.file.exists('build/modules')) {
grunt.file.delete('build/modules');
}
});
// Register jsx:normal and :release tasks.
2013-05-30 03:46:11 +08:00
grunt.registerMultiTask('jsx', jsxTask);
// Our own browserify-based tasks to build a single JS file build
grunt.registerMultiTask('browserify', browserifyTask);
2013-05-30 03:46:11 +08:00
grunt.registerMultiTask('populist', populistTask);
2013-11-08 03:57:53 +08:00
grunt.registerTask('sauce-tunnel', sauceTunnelTask);
2013-11-01 06:58:25 +08:00
grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
2013-12-17 13:25:05 +08:00
grunt.registerMultiTask('webdriver-perf', require('./grunt/tasks/webdriver-perf'));
grunt.registerMultiTask('npm', npmTask);
grunt.registerTask('npm-react:release', npmReactTasks.buildRelease);
grunt.registerTask('npm-react:pack', npmReactTasks.packRelease);
grunt.registerTask('npm-react-tools:release', npmReactToolsTasks.buildRelease);
grunt.registerTask('npm-react-tools:pack', npmReactToolsTasks.packRelease);
grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
2013-10-23 08:59:24 +08:00
grunt.registerTask('version-check', versionCheckTask);
grunt.registerTask('build:basic', ['jsx:normal', 'version-check', 'browserify:basic']);
grunt.registerTask('build:addons', ['jsx:normal', 'browserify:addons']);
grunt.registerTask('build:transformer', ['jsx:normal', 'browserify:transformer']);
grunt.registerTask('build:min', ['jsx:normal', 'version-check', 'browserify:min']);
grunt.registerTask('build:addons-min', ['jsx:normal', 'browserify:addonsMin']);
2013-11-19 05:02:01 +08:00
grunt.registerTask('build:withCodeCoverageLogging', [
'jsx:normal',
2013-11-19 05:02:01 +08:00
'version-check',
'browserify:withCodeCoverageLogging'
2013-11-19 05:02:01 +08:00
]);
2013-12-17 13:25:05 +08:00
grunt.registerTask('build:perf', [
'jsx:normal',
2013-12-17 13:25:05 +08:00
'version-check',
'browserify:transformer',
'browserify:basic',
'browserify:min',
2013-12-17 13:25:05 +08:00
'download-previous-version'
]);
2013-05-30 03:46:11 +08:00
grunt.registerTask('build:test', [
'delete-build-modules',
2013-05-30 03:46:11 +08:00
'jsx:test',
'version-check',
'populist:test'
2013-05-30 03:46:11 +08:00
]);
grunt.registerTask('build:npm-react', ['version-check', 'jsx:normal', 'npm-react:release']);
grunt.registerTask('build:gem-react-source', ['build', 'gem-react-source:release']);
2013-05-30 03:46:11 +08:00
grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
2013-11-16 05:31:29 +08:00
grunt.registerTask('coverage:parse', require('./grunt/tasks/coverage-parse'));
grunt.registerTask('test:webdriver:phantomjs', [
2013-10-30 06:21:49 +08:00
'connect',
'webdriver-phantomjs',
2013-11-01 06:58:25 +08:00
'webdriver-jasmine:local'
2013-10-30 06:21:49 +08:00
]);
2013-12-04 06:52:44 +08:00
2013-12-17 13:25:05 +08:00
grunt.registerTask('perf:webdriver:phantomjs', [
'connect',
'webdriver-phantomjs',
'webdriver-perf:local'
]);
grunt.registerTask('test:full', [
'build:test',
'build:basic',
'connect',
'webdriver-phantomjs',
'webdriver-jasmine:local',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_android',
'webdriver-jasmine:saucelabs_firefox',
2013-12-05 04:53:17 +08:00
'webdriver-jasmine:saucelabs_chrome'
]);
2013-12-17 13:25:05 +08:00
grunt.registerTask('perf:full', [
'build:perf',
'connect',
'webdriver-phantomjs',
'webdriver-perf:local',
'sauce-tunnel',
'webdriver-perf:saucelabs_firefox',
'webdriver-perf:saucelabs_chrome',
'webdriver-perf:saucelabs_ie11',
'webdriver-perf:saucelabs_ie8',
]);
2013-12-04 06:52:44 +08:00
grunt.registerTask('test:webdriver:saucelabs', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
2013-12-05 04:53:17 +08:00
'webdriver-jasmine:saucelabs_' + (process.env.BROWSER_NAME || 'ie8')
2013-12-04 06:52:44 +08:00
]);
grunt.registerTask('test:webdriver:saucelabs:modern', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_android',
'webdriver-jasmine:saucelabs_firefox',
'webdriver-jasmine:saucelabs_chrome',
'webdriver-jasmine:saucelabs_ie11'
]);
2013-12-05 04:53:01 +08:00
grunt.registerTask('test:webdriver:saucelabs:ie', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_ie8',
'webdriver-jasmine:saucelabs_ie9',
'webdriver-jasmine:saucelabs_ie10',
'webdriver-jasmine:saucelabs_ie11'
]);
grunt.registerTask('test:webdriver:saucelabs:ios', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_ios6_1',
'webdriver-jasmine:saucelabs_ios5_1',
'webdriver-jasmine:saucelabs_ios4'
]);
2013-11-19 05:02:01 +08:00
grunt.registerTask('test:coverage', [
'build:test',
'build:withCodeCoverageLogging',
'test:webdriver:phantomjs',
'coverage:parse'
]);
2014-04-12 19:05:30 +08:00
grunt.registerTask('fasttest', function() {
if (grunt.option('debug')) {
grunt.task.run('build:test', 'connect:server:keepalive');
} else {
grunt.task.run('build:test', 'test:webdriver:phantomjs');
}
});
2014-03-07 14:11:25 +08:00
grunt.registerTask('test', function() {
if (grunt.option('debug')) {
grunt.task.run('build:test', 'build:basic', 'connect:server:keepalive');
} else {
grunt.task.run('build:test', 'build:basic', 'test:webdriver:phantomjs');
}
});
2013-12-17 13:25:05 +08:00
grunt.registerTask('perf', ['build:perf', 'perf:webdriver:phantomjs']);
grunt.registerTask('npm:test', ['build', 'npm:pack']);
2013-05-30 03:46:11 +08:00
// Optimized build task that does all of our builds. The subtasks will be run
// in order so we can take advantage of that and only run jsx:normal once.
2013-05-30 03:46:11 +08:00
grunt.registerTask('build', [
'delete-build-modules',
'jsx:normal',
'version-check',
'browserify:basic',
'browserify:transformer',
'browserify:addons',
'browserify:min',
'browserify:addonsMin',
'npm-react:release',
'npm-react:pack',
'npm-react-tools:release',
'npm-react-tools:pack',
2013-05-30 03:46:11 +08:00
'copy:react_docs',
'compare_size'
]);
// Automate the release!
grunt.registerTask('release:setup', releaseTasks.setup);
grunt.registerTask('release:bower', releaseTasks.bower);
grunt.registerTask('release:docs', releaseTasks.docs);
grunt.registerTask('release:msg', releaseTasks.msg);
grunt.registerTask('release:starter', releaseTasks.starter);
grunt.registerTask('release', [
'release:setup',
'clean',
'build',
'gem-react-source:release',
'gem-react-source:pack',
2013-05-30 03:46:11 +08:00
'release:bower',
'release:starter',
'compress',
'release:docs',
'release:msg'
]);
// The default task - build - to keep setup easy
grunt.registerTask('default', ['build']);
};