react/Gruntfile.js

199 lines
6.6 KiB
JavaScript
Raw Normal View History

2013-05-30 03:46:11 +08:00
'use strict';
var exec = require('child_process').exec;
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');
2013-05-30 03:46:11 +08:00
module.exports = function(grunt) {
if (!process.env.SAUCE_USERNAME) {
process.env.SAUCE_USERNAME = 'React';
}
if (!process.env.SAUCE_ACCESS_KEY) {
process.env.SAUCE_ACCESS_KEY = '339d32ca-d594-4570-a3c2-94c50a91919b';
}
2013-05-30 03:46:11 +08:00
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
copy: require('./grunt/config/copy'),
jsx: require('./grunt/config/jsx/jsx'),
browserify: require('./grunt/config/browserify'),
populist: require('./grunt/config/populist'),
connect: require('./grunt/config/server')(grunt),
2013-11-01 06:58:25 +08:00
"webdriver-jasmine": require('./grunt/config/webdriver-jasmine.js'),
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'),
2013-11-27 03:56:25 +08:00
compare_size: require('./grunt/config/compare_size'),
complexity: require('./grunt/config/complexity')
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
// Alias 'jshint' to 'lint' to better match the workflow we know
grunt.registerTask('lint', ['jshint']);
// Register jsx:debug and :release tasks.
grunt.registerMultiTask('jsx', jsxTask);
// Our own browserify-based tasks to build a single JS file build
grunt.registerMultiTask('browserify', browserifyTask);
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);
grunt.registerMultiTask('npm', npmTask);
grunt.registerTask('npm-react:release', npmReactTasks.buildRelease);
2013-10-23 08:59:24 +08:00
// Check that the version we're exporting is the same one we expect in the
// package. This is not an ideal way to do this, but makes sure that we keep
// them in sync.
var reactVersionExp = /\bReact\.version\s*=\s*['"]([^'"]+)['"];/;
grunt.registerTask('version-check', function() {
2013-10-23 08:59:24 +08:00
var reactVersion = reactVersionExp.exec(
grunt.file.read('./build/modules/React.js')
)[1];
var npmReactVersion = grunt.file.readJSON('./npm-react/package.json').version;
2013-10-23 08:59:24 +08:00
var reactToolsVersion = grunt.config.data.pkg.version;
if (reactVersion !== reactToolsVersion) {
grunt.log.error(
'React version does not match react-tools version. Expected %s, saw %s',
reactToolsVersion,
reactVersion
);
return false;
}
if (npmReactVersion !== reactToolsVersion) {
2013-10-23 08:59:24 +08:00
grunt.log.error(
'npm-react version does not match react-tools veersion. Expected %s, saw %s',
2013-10-23 08:59:24 +08:00
reactToolsVersion,
npmReactVersion
2013-10-23 08:59:24 +08:00
);
return false;
}
});
grunt.registerTask('build:basic', ['jsx:debug', 'version-check', 'browserify:basic']);
grunt.registerTask('build:addons', ['jsx:debug', 'browserify:addons']);
2013-05-30 03:46:11 +08:00
grunt.registerTask('build:transformer', ['jsx:debug', 'browserify:transformer']);
grunt.registerTask('build:min', ['jsx:release', 'version-check', 'browserify:min']);
grunt.registerTask('build:addons-min', ['jsx:debug', 'browserify:addonsMin']);
2013-11-19 05:02:01 +08:00
grunt.registerTask('build:withCodeCoverageLogging', [
'jsx:debug',
'version-check',
'browserify:withCodeCoverageLogging'
]);
2013-05-30 03:46:11 +08:00
grunt.registerTask('build:test', [
'jsx:test',
'version-check',
'populist:test'
2013-05-30 03:46:11 +08:00
]);
grunt.registerTask('build:npm-react', ['version-check', 'jsx:release', 'react-core: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
grunt.registerTask('test:full', [
'build:test',
'build:basic',
'connect',
'webdriver-phantomjs',
'webdriver-jasmine:local',
'sauce-tunnel',
// 'webdriver-jasmine:saucelabs_ios', // uncomment once tests pass on iOS
'webdriver-jasmine:saucelabs_android',
'webdriver-jasmine:saucelabs_firefox',
'webdriver-jasmine:saucelabs_chrome',
// 'webdriver-jasmine:saucelabs_safari' // uncomment once tests pass in Safari
]);
2013-12-04 06:52:44 +08:00
grunt.registerTask('test:webdriver:saucelabs', [
'build:test',
'build:basic',
'connect',
'sauce-tunnel',
'webdriver-jasmine:saucelabs_' + (process.env.BROWSER_NAME || 'ie8'),
]);
2013-11-19 05:02:01 +08:00
grunt.registerTask('test:coverage', [
'build:test',
'build:withCodeCoverageLogging',
'test:webdriver:phantomjs',
'coverage:parse'
]);
grunt.registerTask('test', ['build:test', 'build:basic', 'test: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:debug once.
grunt.registerTask('build', [
'jsx:debug',
'version-check',
2013-05-30 03:46:11 +08:00
'browserify:basic',
'browserify:transformer',
'browserify:addons',
2013-05-30 03:46:11 +08:00
'jsx:release',
'browserify:min',
'browserify:addonsMin',
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:only',
'release:bower',
'release:starter',
'compress',
'release:docs',
'release:msg'
]);
// `gem` task to build the react-source gem
grunt.registerTask('gem', ['build', 'gem:only']);
grunt.registerTask('gem:only', function() {
var done = this.async();
exec('gem build react-source.gemspec', done);
});
// The default task - build - to keep setup easy
grunt.registerTask('default', ['build']);
};