treeherder/Gruntfile.js

252 строки
8.2 KiB
JavaScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, you can obtain one at http://mozilla.org/MPL/2.0/. */
'use strict';
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
clean: {
dist: ['dist/'],
tmp: ['.tmp/']
},
htmlangular: {
options: {
reportpath: null
},
files: {
src: ['ui/*.html'],
nonull: true
},
},
useminPrepare:{
index: {
src:'ui/index.html',
nonull: true,
options:{
dest:'dist'
}
},
help: {
src:'ui/help.html',
nonull: true,
options:{
dest:'dist'
}
},
logviewer: {
src:'ui/logviewer.html',
nonull: true,
options:{
dest:'dist'
}
},
perf: {
src:'ui/perf.html',
nonull: true,
options:{
dest:'dist'
}
},
},
usemin:{ html:['dist/index.html', 'dist/help.html', 'dist/logviewer.html',
'dist/perf.html'] },
'cache-busting': {
indexjs: {
replace: ['dist/**/*.html'],
replacement: 'index.min.js',
file: 'dist/js/index.min.js',
cleanup: true //Remove previously generated hashed files.
},
logviewerjs: {
replace: ['dist/**/*.html'],
replacement: 'logviewer.min.js',
file: 'dist/js/logviewer.min.js',
cleanup: true
},
perfjs: {
replace: ['dist/**/*.html'],
replacement: 'perf.min.js',
file: 'dist/js/perf.min.js',
cleanup: true
},
indexcss: {
replace: ['dist/**/*.html'],
replacement: 'index.min.css',
file: 'dist/css/index.min.css',
cleanup: true
},
logviewercss: {
replace: ['dist/**/*.html'],
replacement: 'logviewer.min.css',
file: 'dist/css/logviewer.min.css',
cleanup: true
},
perfcss: {
replace: ['dist/**/*.html'],
replacement: 'perf.min.css',
file: 'dist/css/perf.min.css',
cleanup: true
},
helpcss: {
replace: ['dist/**/*.html'],
replacement: 'help.min.css',
file: 'dist/css/help.min.css',
cleanup: true
}
},
copy:{
main: {
files: [
{ src:'ui/index.html', dest:'dist/index.html', nonull: true },
{ src:'ui/help.html', dest:'dist/help.html', nonull: true },
{ src:'ui/logviewer.html', dest:'dist/logviewer.html', nonull: true },
{ src:'ui/perf.html', dest:'dist/perf.html', nonull: true }
]
},
// Copy img dir
img:{
expand: true,
src: 'ui/img/*',
dest: 'dist/img/',
nonull: true,
flatten: true
},
// Copy html in partials
partials:{
expand: true,
src: 'ui/partials/*',
dest: 'dist/partials/',
nonull: true,
flatten: true
},
// Copy fonts
fonts:{
expand: true,
src: 'ui/vendor/fonts/*',
dest: 'dist/fonts/',
nonull: true,
flatten: true
},
// Copy html in plugins, make sure not to flatten
// to retain the directory structure for the html
// and make paths relative with cwd definition.
plugins:{
expand: true,
cwd: 'ui/plugins/',
src: '**/*.html',
dest: 'dist/plugins/',
nonull: true,
flatten: false
}
},
uglify:{
options:{
report: 'min',
// Cannot use mangle, it will break angularjs's dependency
// injection
mangle: false
}
},
ngtemplates: {
treeherder: {
cwd: 'ui',
src: ['partials/main/*.html', 'plugins/**/*.html'],
dest: 'dist/js/index.min.js',
options: {
usemin: 'dist/js/index.min.js',
append: true,
htmlmin: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
conservativeCollapse: true,
removeAttributeQuotes: true,
removeComments: true,
removeEmptyAttributes: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true
}
}
},
logviewer: {
cwd: 'ui',
src: 'partials/logviewer/*.html',
dest: 'dist/js/logviewer.min.js',
options: {
usemin: 'dist/js/logviewer.min.js',
append: true,
htmlmin: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
removeEmptyAttributes: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true
}
}
},
perf: {
cwd: 'ui',
src: 'partials/perf/*.html',
dest: 'dist/js/perf.min.js',
options: {
usemin: 'dist/js/perf.min.js',
append: true,
htmlmin: {
collapseBooleanAttributes: true,
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true,
removeEmptyAttributes: true,
removeRedundantAttributes: true,
removeScriptTypeAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true
}
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-usemin');
grunt.loadNpmTasks('grunt-cache-busting');
grunt.loadNpmTasks('grunt-angular-templates');
grunt.loadNpmTasks('grunt-html-angular-validate');
// Default tasks
grunt.registerTask('build', [
'clean:dist',
'copy:main',
'copy:img',
'copy:fonts',
'useminPrepare',
'concat',
'cssmin',
'uglify',
'usemin',
'ngtemplates',
'cache-busting',
'clean:tmp'
]);
};