blob: 52ae4122aedcd22cf1b4e104b4e60686f233805c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
var git = require('git-rev');
module.exports = function(grunt) {
var classPathSep = (process.platform === "win32") ? ';' : ':',
gitHash = '',
pkg = grunt.file.readJSON('package.json'),
distPath = 'dist',
isDashboardDirectory = grunt.file.isDir('public'),
modulesPath = 'public/';
if (!isDashboardDirectory)
modulesPath = '../public/'
grunt.initConfig({
watch: {
options: {
livereload: 35729
},
js: {
files: ['public/**/*.js', '!public/lib/**', '!public/dist/**', '!public/js/app.min.js'],
tasks: ['shell']
},
html: {
files: ['public/**/*.html'],
tasks: ['copy:dist']
},
css: {
files: ['public/**/*.css'],
tasks: ['copy:dist']
},
image: {
files: ['public/**/*.{ico,gif,png}'],
tasks: ['copy:dist']
}
},
jshint: {
all: {
src: ['gruntfile.js', 'package.json', 'server.js', 'server/**/*.js', 'public/**/*.js', '!public/lib/**', '!public/dist/**', '!public/**/app.min.js'],
options: {
jshintrc: true
}
}
},
concurrent: {
tasks: ['watch', 'proxitserver'],
options: {
logConcurrentOutput: true
}
},
jsbeautifier: {
'default': {
src: ['<%= jshint.all.src %>', 'bower.json'],
options: {
js: {
preserveNewlines: true,
maxPreserveNewlines: 2
}
}
},
'build': {
src: '<%= jsbeautifier.default.src %>',
options: {
mode: 'VERIFY_ONLY',
js: '<%= jsbeautifier.default.options.js%>'
}
}
},
bower: {
install: {
options: {
verbose: true,
targetDir: '.bower-components'
}
}
},
dist: distPath + '/js/app.min.js',
modules: grunt.file.expand(
modulesPath + 'js/app.js',
modulesPath + 'js/routes.js',
modulesPath + 'modules/**/*Module.js',
modulesPath + 'modules/**/*.js',
modulesPath + 'js/init.js'
).join(' '),
shell: {
min: {
command: 'java ' +
'-cp ' + distPath + '/lib/closure-compiler/compiler.jar' + classPathSep +
'' + distPath + '/lib/ng-closure-runner/ngcompiler.jar ' +
'org.angularjs.closurerunner.NgClosureRunner ' +
'--compilation_level SIMPLE_OPTIMIZATIONS ' +
//'--formatting PRETTY_PRINT ' +
'--language_in ECMASCRIPT5_STRICT ' +
'--angular_pass ' +
'--manage_closure_dependencies ' +
'--js <%= modules %> ' +
'--js_output_file <%= dist %>'
}
},
devUpdate: {
main: {
options: {
updateType: 'force'
}
}
},
compress: {
release: {
options: {
archive: function() {
return [pkg.name, pkg.version, gitHash].join('_') + '.tgz';
}
},
src: ['node_modules/**', 'package.json', 'server.js', 'server/**', 'public/**', '!public/js/**', '!public/modules/**/*.js']
}
},
copy: {
dist: {
expand: true,
cwd: modulesPath,
src: ['**', '!js/**/*.js', '!modules/**/*.js'],
dest: distPath
}
},
clean: {
build: [distPath],
options: {
force: true
}
},
proxit: {
dev: {
options: {
'port': 3010,
'verbose': true,
'hosts': [{
'hostnames': ['*'],
'routes': {
'/': distPath,
//'/api': 'http://162.249.6.39:21000/api'
'/api': 'http://ec2-52-25-142-7.us-west-2.compute.amazonaws.com:21000/api'
}
}]
}
}
}
});
require('load-grunt-tasks')(grunt);
grunt.registerTask('default', ['devUpdate', 'bower', 'jshint', 'jsbeautifier:default']);
grunt.registerTask('server', ['jshint', 'clean', 'bower', 'copy:dist', 'minify', 'concurrent']);
grunt.registerTask('build', ['copy:dist', 'minify']);
grunt.registerTask('minify', 'Minify the all js', function() {
var done = this.async();
grunt.task.run(['shell:min']);
done();
});
grunt.loadNpmTasks('proxit');
grunt.registerTask('proxitserver', 'Proxit', function() {
var done = this.async();
grunt.task.run(['proxit:dev']);
done();
});
grunt.registerTask('release', 'Create release package', function() {
var done = this.async();
git.short(function(str) {
gitHash = str;
grunt.task.run(['minify', 'compress:release']);
done();
});
});
};