mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
308 lines
6.2 KiB
JavaScript
308 lines
6.2 KiB
JavaScript
'use strict';
|
|
|
|
var util = require('util');
|
|
|
|
module.exports = function(grunt) {
|
|
/*jshint maxstatements:false */
|
|
|
|
require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
|
|
|
|
grunt.initConfig({
|
|
|
|
config: {
|
|
appName: 'etcd-dashboard',
|
|
appPath: 'app',
|
|
bowerPath: 'app/bower_components',
|
|
tmpPath: '.tmp',
|
|
distPath: 'dist'
|
|
},
|
|
|
|
watch: {
|
|
css: {
|
|
files: ['<%= config.appPath %>/{page,ui,style}/{**/,}*.scss'],
|
|
tasks: ['sass']
|
|
},
|
|
html: {
|
|
files: [
|
|
'<%= config.appPath %>/{module,ui,page}/**/*.html'
|
|
],
|
|
tasks: ['views']
|
|
},
|
|
js: {
|
|
files: [
|
|
'<%= config.appPath %>/{module,page}/**/*.js',
|
|
'<%= config.appPath %>/*.js'
|
|
],
|
|
tasks: ['jshint']
|
|
}
|
|
},
|
|
|
|
concurrent: {
|
|
dev: {
|
|
tasks: [
|
|
'watch',
|
|
//'test-watch'
|
|
],
|
|
options: {
|
|
logConcurrentOutput: true
|
|
}
|
|
}
|
|
},
|
|
|
|
clean: {
|
|
tmp: {
|
|
files: [{
|
|
dot: true,
|
|
src: [
|
|
'<%= config.tmpPath %>',
|
|
'.sass-cache/**/*'
|
|
]
|
|
}]
|
|
},
|
|
dist: {
|
|
files: [{
|
|
dot: true,
|
|
src: [
|
|
'<%= config.distPath %>/*'
|
|
]
|
|
}]
|
|
},
|
|
'dist-static': {
|
|
files: [{
|
|
dot: true,
|
|
src: [
|
|
'<%= config.distPath %>/cp/**'
|
|
]
|
|
}]
|
|
},
|
|
compiled: {
|
|
files: [{
|
|
dot: true,
|
|
src: [
|
|
'<%= config.appPath %>/compiled/**'
|
|
]
|
|
}]
|
|
}
|
|
},
|
|
|
|
// JS code linting.
|
|
jshint: {
|
|
options: {
|
|
camelcase: true,
|
|
curly: true,
|
|
eqeqeq: true,
|
|
eqnull: true,
|
|
forin: true,
|
|
freeze: true,
|
|
immed: true,
|
|
indent: 2,
|
|
latedef: true,
|
|
maxcomplexity: 10,
|
|
maxdepth: 3,
|
|
maxlen: 80,
|
|
maxparams: 20,
|
|
maxstatements: 200,
|
|
newcap: true,
|
|
noarg: true,
|
|
node: true,
|
|
noempty: true,
|
|
nonew: true,
|
|
nonbsp: true,
|
|
quotmark: 'single',
|
|
strict: true,
|
|
sub: true,
|
|
trailing: true,
|
|
undef: true,
|
|
unused: true
|
|
},
|
|
src: {
|
|
node: false,
|
|
options: {
|
|
globals: {
|
|
angular: true,
|
|
window: true
|
|
}
|
|
},
|
|
files: {
|
|
src: [
|
|
'<%= config.appPath %>/*.js',
|
|
'<%= config.appPath %>/{module,page}**/*.js',
|
|
'!<%= config.appPath %>/vega.js'
|
|
]
|
|
}
|
|
}
|
|
},
|
|
|
|
// Compile SCSS to CSS.
|
|
sass: {
|
|
etcd: {
|
|
options: {
|
|
includePaths: ['<%= config.appPath %>/coreos-web/sass'],
|
|
outputStyle: 'nested'
|
|
},
|
|
files: {
|
|
'<%= config.appPath %>/compiled/main.css': '<%= config.appPath %>/main.scss'
|
|
}
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Generate grunt configs for concat, uglify, cssmin.
|
|
*/
|
|
useminPrepare: {
|
|
html: '<%= config.appPath %>/index.html',
|
|
options: {
|
|
dest: '<%= config.distPath %>'
|
|
}
|
|
},
|
|
|
|
usemin: {
|
|
html: ['<%= config.distPath %>/index.html']
|
|
},
|
|
|
|
// This block gets generated by usemin.
|
|
cssmin: {
|
|
},
|
|
|
|
// This block gets generated by usemin.
|
|
uglify: {
|
|
},
|
|
|
|
// This block gets generated by usemin.
|
|
concat: {
|
|
},
|
|
|
|
// Make our angular code minification friendly.
|
|
ngmin: {
|
|
dist: {
|
|
files: [{
|
|
src: '<%= config.tmpPath %>/concat/app.js',
|
|
dest: '<%= config.tmpPath %>/concat/app.js'
|
|
}]
|
|
}
|
|
},
|
|
|
|
copy: {
|
|
dist: {
|
|
files: [{
|
|
expand: true,
|
|
cwd: '<%= config.appPath %>',
|
|
src: ['index.html'],
|
|
dest: '<%= config.distPath %>'
|
|
}]
|
|
},
|
|
images: {
|
|
files: [{
|
|
expand: true,
|
|
cwd: '<%= config.appPath %>/img',
|
|
src: ['**'],
|
|
dest: '<%= config.distPath %>/img'
|
|
}]
|
|
},
|
|
'coreos-web': {
|
|
files: [{
|
|
cwd: '<%= config.appPath %>/coreos-web',
|
|
expand: true,
|
|
src: [
|
|
'fonts/*',
|
|
'img/*'
|
|
],
|
|
dest: '<%= config.distPath %>/coreos-web'
|
|
}]
|
|
},
|
|
'dist-static': {
|
|
files: [
|
|
{
|
|
expand: true,
|
|
flatten: true,
|
|
src: [
|
|
'<%= config.distPath %>/cp/static/*'
|
|
],
|
|
dest: '<%= config.distPath %>'
|
|
}
|
|
]
|
|
}
|
|
},
|
|
|
|
// Precompile html views into a single javascript file.
|
|
html2js: {
|
|
options: {
|
|
base: '<%= config.appPath %>',
|
|
rename: function(moduleName) {
|
|
return '/' + moduleName;
|
|
}
|
|
},
|
|
views: {
|
|
src: [
|
|
'<%= config.appPath %>/{page,ui,module}/**/*.html'
|
|
],
|
|
dest: '<%= config.appPath %>/compiled/views.js'
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
grunt.registerTask('clean-paths', 'clean up resource paths', function() {
|
|
grunt.log.writeln('cleaning paths...');
|
|
function clean(path) {
|
|
return path.replace('mod/dashboard/static/', '');
|
|
}
|
|
['concat', 'uglify', 'cssmin'].forEach(function(task) {
|
|
var config = grunt.config(task);
|
|
|
|
config.generated.files.forEach(function(fileGroup) {
|
|
fileGroup.dest = clean(fileGroup.dest);
|
|
fileGroup.src = fileGroup.src.map(function(path) {
|
|
return clean(path);
|
|
});
|
|
});
|
|
grunt.config(task, config);
|
|
grunt.log.ok(task + ' config is now:');
|
|
grunt.log.writeln(util.inspect(grunt.config(task), false, 4, true));
|
|
});
|
|
});
|
|
|
|
grunt.registerTask('test', [
|
|
'views',
|
|
'karma:unit'
|
|
]);
|
|
|
|
grunt.registerTask('test-watch', [
|
|
'karma:dev'
|
|
]);
|
|
|
|
grunt.registerTask('views', [
|
|
'html2js:views'
|
|
]);
|
|
|
|
grunt.registerTask('dev', [
|
|
'clean',
|
|
'jshint',
|
|
'views',
|
|
'sass',
|
|
'concurrent:dev'
|
|
]);
|
|
|
|
grunt.registerTask('build', [
|
|
'clean',
|
|
'jshint',
|
|
'views',
|
|
//'test',
|
|
'sass',
|
|
'useminPrepare',
|
|
'clean-paths',
|
|
'concat',
|
|
'ngmin:dist',
|
|
'uglify',
|
|
'cssmin',
|
|
'copy:dist',
|
|
'usemin',
|
|
'copy:dist-static',
|
|
'clean:dist-static',
|
|
'copy:images',
|
|
'copy:coreos-web'
|
|
]);
|
|
|
|
grunt.registerTask('default', ['build']);
|
|
};
|