299 lines
8.4 KiB
JavaScript
299 lines
8.4 KiB
JavaScript
'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');
|
|
var webdriverJasmineTasks = require('./grunt/tasks/webdriver-jasmine');
|
|
var sauceTunnelTask = require('./grunt/tasks/sauce-tunnel');
|
|
var npmTask = require('./grunt/tasks/npm');
|
|
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');
|
|
var eslintTask = require('./grunt/tasks/eslint');
|
|
|
|
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'),
|
|
populist: require('./grunt/config/populist')(grunt),
|
|
connect: require('./grunt/config/server')(grunt),
|
|
'webdriver-jasmine': require('./grunt/config/webdriver-jasmine'),
|
|
'webdriver-perf': require('./grunt/config/webdriver-perf'),
|
|
npm: require('./grunt/config/npm'),
|
|
clean: [
|
|
'./build',
|
|
'./*.gem',
|
|
'./docs/_site',
|
|
'./examples/shared/*.js',
|
|
'.module-cache'
|
|
],
|
|
jshint: require('./grunt/config/jshint'),
|
|
/*eslint-disable camelcase */
|
|
compare_size: require('./grunt/config/compare_size')
|
|
/*eslint-enable camelcase */
|
|
});
|
|
|
|
grunt.config.set('compress', require('./grunt/config/compress'));
|
|
|
|
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);
|
|
});
|
|
|
|
grunt.registerTask('eslint', eslintTask);
|
|
|
|
grunt.registerTask('lint', ['eslint']);
|
|
|
|
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.
|
|
grunt.registerMultiTask('jsx', jsxTask);
|
|
|
|
// Our own browserify-based tasks to build a single JS file build
|
|
grunt.registerMultiTask('browserify', browserifyTask);
|
|
|
|
grunt.registerMultiTask('populist', populistTask);
|
|
|
|
grunt.registerTask('sauce-tunnel', sauceTunnelTask);
|
|
|
|
grunt.registerMultiTask('webdriver-jasmine', webdriverJasmineTasks);
|
|
|
|
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);
|
|
|
|
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'
|
|
]);
|
|
grunt.registerTask('build:withCodeCoverageLogging', [
|
|
'jsx:normal',
|
|
'version-check',
|
|
'browserify:withCodeCoverageLogging'
|
|
]);
|
|
grunt.registerTask('build:perf', [
|
|
'jsx:normal',
|
|
'version-check',
|
|
'browserify:transformer',
|
|
'browserify:basic',
|
|
'browserify:min',
|
|
'download-previous-version'
|
|
]);
|
|
grunt.registerTask('build:test', [
|
|
'delete-build-modules',
|
|
'jsx:test',
|
|
'version-check',
|
|
'populist:test'
|
|
]);
|
|
grunt.registerTask('build:npm-react', [
|
|
'version-check',
|
|
'jsx:normal',
|
|
'npm-react:release'
|
|
]);
|
|
grunt.registerTask('build:gem-react-source', [
|
|
'build',
|
|
'gem-react-source:release'
|
|
]);
|
|
|
|
grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
|
|
|
|
grunt.registerTask('coverage:parse', require('./grunt/tasks/coverage-parse'));
|
|
|
|
grunt.registerTask('test:webdriver:phantomjs', [
|
|
'connect',
|
|
'webdriver-phantomjs',
|
|
'webdriver-jasmine:local'
|
|
]);
|
|
|
|
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',
|
|
'webdriver-jasmine:saucelabs_chrome'
|
|
]);
|
|
|
|
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'
|
|
]);
|
|
|
|
grunt.registerTask('test:webdriver:saucelabs', [
|
|
'build:test',
|
|
'build:basic',
|
|
|
|
'connect',
|
|
'sauce-tunnel',
|
|
'webdriver-jasmine:saucelabs_' + (process.env.BROWSER_NAME || 'ie8')
|
|
]);
|
|
|
|
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'
|
|
]);
|
|
|
|
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'
|
|
]);
|
|
|
|
grunt.registerTask('test:coverage', [
|
|
'build:test',
|
|
'build:withCodeCoverageLogging',
|
|
'test:webdriver:phantomjs',
|
|
'coverage:parse'
|
|
]);
|
|
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');
|
|
}
|
|
});
|
|
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');
|
|
}
|
|
});
|
|
grunt.registerTask('perf', ['build:perf', 'perf:webdriver:phantomjs']);
|
|
grunt.registerTask('npm:test', ['build', 'npm:pack']);
|
|
|
|
// 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.
|
|
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',
|
|
'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',
|
|
'release:bower',
|
|
'release:starter',
|
|
'compress',
|
|
'release:docs',
|
|
'release:msg'
|
|
]);
|
|
|
|
// The default task - build - to keep setup easy
|
|
grunt.registerTask('default', ['build']);
|
|
};
|