Skip to content

Commit

Permalink
Modularize grunt tasks
Browse files Browse the repository at this point in the history
  • Loading branch information
Rashid Khan committed Nov 14, 2013
1 parent 2e7a2d7 commit ec964a1
Show file tree
Hide file tree
Showing 18 changed files with 416 additions and 379 deletions.
391 changes: 13 additions & 378 deletions Gruntfile.js

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@
"grunt-contrib-requirejs": "~0.4.1",
"grunt-angular-templates": "~0.3.12",
"grunt-contrib-compress": "~0.5.2",
"grunt-contrib-uglify": "~0.2.4"
"grunt-contrib-uglify": "~0.2.4",
"load-grunt-tasks": "~0.2.0",
"glob": "~3.2.7"
},
"license": "Apache License"
}
38 changes: 38 additions & 0 deletions tasks/build_task.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
module.exports = function(grunt) {

// Concat and Minify the src directory into dist
grunt.registerTask('build', [
'jshint:source',
'clean:on_start',
'less:dist',
'copy:everything_but_less_to_temp',
'htmlmin:build',
'cssmin:build',
'ngmin:build',
'requirejs:build',
'clean:temp',
'build:write_revision',
'uglify:dest'
]);

// run a string replacement on the require config, using the latest revision number as the cache buster
grunt.registerTask('build:write_revision', function() {
grunt.event.once('git-describe', function (desc) {
grunt.config('string-replace.config', {
src: '<%= destDir %>/app/components/require.config.js',
dest: '<%= destDir %>/app/components/require.config.js',
options: {
replacements: [
{
pattern: /(?:^|\/\/)(.*)@REV@/,
replacement: '$1'+desc.object
}
]
}
});

grunt.task.run('string-replace:config');
});
grunt.task.run('git-describe');
});
}
4 changes: 4 additions & 0 deletions tasks/default_task.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// Lint and build CSS
module.exports = function(grunt) {
grunt.registerTask('default', ['jshint:source', 'less:src']);
};
31 changes: 31 additions & 0 deletions tasks/distribute_task.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module.exports = function(grunt) {

// build, then zip and upload to s3
grunt.registerTask('distribute', [
'distribute:load_s3_config',
'build',
'compress:zip',
'compress:tgz',
's3:dist',
'clean:temp'
]);

// build, then zip and upload to s3
grunt.registerTask('release', [
'distribute:load_s3_config',
'build',
'compress:zip_release',
'compress:tgz_release',
's3:release',
'clean:temp'
]);

// collect the key and secret from the .aws-config.json file, finish configuring the s3 task
grunt.registerTask('distribute:load_s3_config', function () {
var config = grunt.file.readJSON('.aws-config.json');
grunt.config('s3.options', {
key: config.key,
secret: config.secret
});
});
}
6 changes: 6 additions & 0 deletions tasks/options/clean.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = function(config) {
return {
on_start: ['<%= destDir %>', '<%= tempDir %>'],
temp: ['<%= tempDir %>'],
};
};
76 changes: 76 additions & 0 deletions tasks/options/compress.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
module.exports = function(config) {
return {
zip: {
options: {
archive: '<%= tempDir %>/<%= pkg.name %>-latest.zip'
},
files : [
{
expand: true,
cwd: '<%= destDir %>',
src: ['**/*'],
dest: '<%= pkg.name %>-latest'
},
{
expand: true,
src: ['LICENSE.md', 'README.md'],
dest: '<%= pkg.name %>-latest'
}
]
},
tgz: {
options: {
archive: '<%= tempDir %>/<%= pkg.name %>-latest.tar.gz'
},
files : [
{
expand: true,
cwd: '<%= destDir %>',
src: ['**/*'],
dest: '<%= pkg.name %>-latest'
},
{
expand: true,
src: ['LICENSE.md', 'README.md'],
dest: '<%= pkg.name %>-latest'
}
]
},
zip_release: {
options: {
archive: '<%= tempDir %>/<%= pkg.name %>-<%= pkg.version %>.zip'
},
files : [
{
expand: true,
cwd: '<%= destDir %>',
src: ['**/*'],
dest: '<%= pkg.name %>-<%= pkg.version %>'
},
{
expand: true,
src: ['LICENSE.md', 'README.md'],
dest: '<%= pkg.name %>-<%= pkg.version %>'
}
]
},
tgz_release: {
options: {
archive: '<%= tempDir %>/<%= pkg.name %>-<%= pkg.version %>.tar.gz'
},
files : [
{
expand: true,
cwd: '<%= destDir %>',
src: ['**/*'],
dest: '<%= pkg.name %>-<%= pkg.version %>'
},
{
expand: true,
src: ['LICENSE.md', 'README.md'],
dest: '<%= pkg.name %>-<%= pkg.version %>'
}
]
}
};
};
11 changes: 11 additions & 0 deletions tasks/options/copy.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
module.exports = function(config) {
return {
// copy source to temp, we will minify in place for the dist build
everything_but_less_to_temp: {
cwd: '<%= srcDir %>',
expand: true,
src: ['**/*', '!**/*.less'],
dest: '<%= tempDir %>'
}
};
};
10 changes: 10 additions & 0 deletions tasks/options/cssmin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = function(config) {
return {
build: {
expand: true,
cwd: '<%= tempDir %>',
src: '**/*.css',
dest: '<%= tempDir %>'
}
};
};
7 changes: 7 additions & 0 deletions tasks/options/git-describe.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
module.exports = function(config) {
return {
me: {
// Target-specific file lists and/or options go here.
}
};
};
18 changes: 18 additions & 0 deletions tasks/options/htmlmin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module.exports = function(config) {
return {
build: {
options:{
removeComments: true,
collapseWhitespace: true
},
expand: true,
cwd: '<%= tempDir %>',
src: [
'index.html',
'app/panels/**/*.html',
'app/partials/**/*.html'
],
dest: '<%= tempDir %>'
}
};
};
13 changes: 13 additions & 0 deletions tasks/options/jshint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
module.exports = function(config) {
return {
// just lint the source dir
source: {
files: {
src: ['Gruntfile.js', '<%= srcDir %>/app/**/*.js']
}
},
options: {
jshintrc: '.jshintrc'
}
};
};
24 changes: 24 additions & 0 deletions tasks/options/less.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module.exports = function(config) {
return {
// this is the only task, other than copy, that runs on the src directory, since we don't really need
// the less files in the dist. Everything else runs from on temp, and require copys everything
// from temp -> dist
dist:{
expand: true,
cwd:'<%= srcDir %>/vendor/bootstrap/less/',
src: ['bootstrap.dark.less', 'bootstrap.light.less'],
dest: '<%= tempDir %>/css/',
},
// Compile in place when not building
src:{
options: {
paths: ["<%= srcDir %>/vendor/bootstrap/less"],
yuicompress:true
},
files: {
"<%= srcDir %>/css/bootstrap.dark.min.css": "<%= srcDir %>/vendor/bootstrap/less/bootstrap.dark.less",
"<%= srcDir %>/css/bootstrap.light.min.css": "<%= srcDir %>/vendor/bootstrap/less/bootstrap.light.less"
}
}
};
};
9 changes: 9 additions & 0 deletions tasks/options/meta.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
module.exports = function(config) {
return {
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %>\n' +
'<%= pkg.homepage ? " * " + pkg.homepage + "\\n" : "" %>' +
' * Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>;' +
' Licensed <%= pkg.license %> */\n\n'
};
};
19 changes: 19 additions & 0 deletions tasks/options/ngmin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module.exports = function(config) {
return {
build: {
expand:true,
cwd:'<%= tempDir %>',
src: [
'app/controllers/**/*.js',
'app/directives/**/*.js',
'app/services/**/*.js',
'app/filters/**/*.js',
'app/panels/**/*.js',
'app/app.js',
'vendor/angular/**/*.js',
'vendor/elasticjs/elastic-angular-client.js'
],
dest: '<%= tempDir %>'
}
};
};
84 changes: 84 additions & 0 deletions tasks/options/requirejs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
module.exports = function(config) {
var _c = {
build: {
options: {
appDir: '<%= tempDir %>',
dir: '<%= destDir %>',

mainConfigFile: '<%= tempDir %>/app/components/require.config.js',
modules: [], // populated below

optimize: 'none',
optimizeCss: 'none',
optimizeAllPluginResources: false,

removeCombined: true,
findNestedDependencies: true,
normalizeDirDefines: 'all',
inlineText: true,
skipPragmas: true,

done: function (done, output) {
var duplicates = require('rjs-build-analysis').duplicates(output);

if (duplicates.length > 0) {
grunt.log.subhead('Duplicates found in requirejs build:');
grunt.log.warn(duplicates);
done(new Error('r.js built duplicate modules, please check the excludes option.'));
}

done();
}
}
}
};

// setup the modules require will build
var requireModules = _c.build.options.modules = [
{
// main/common module
name: 'app',
include: [
'css',
'kbn',
'text',
'jquery',
'angular',
'settings',
'bootstrap',
'modernizr',
'elasticjs',
'timepicker',
'datepicker',
'underscore',
'filters/all',
'jquery.flot',
'services/all',
'angular-strap',
'directives/all',
'jquery.flot.pie',
'angular-sanitize',
'angular-dragdrop'
]
}
];

// create a module for each directory in src/app/panels/
require('fs')
.readdirSync(config.srcDir+'/app/panels')
.forEach(function (panelName) {
requireModules.push({
name: 'panels/'+panelName+'/module',
exclude: ['app']
});
});

// exclude the literal config definition from all modules
requireModules
.forEach(function (module) {
module.excludeShallow = module.excludeShallow || [];
module.excludeShallow.push('config');
});

return _c;
};
Loading

0 comments on commit ec964a1

Please sign in to comment.