| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337 |
- /* jshint node:true */
- 'use strict';
- module.exports = function (grunt) {
- var config = {
- pkg: grunt.file.readJSON('package.json'),
- srcDir: 'src',
- destDir: 'dist',
- tempDir: 'tmp',
- meta: {
- 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'
- },
- clean: {
- on_start: ['<%= destDir %>', '<%= tempDir %>'],
- temp: ['<%= tempDir %>'],
- },
- less: {
- // 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"
- }
- }
- },
- copy: {
- // 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 %>'
- }
- },
- jshint: {
- // just lint the source dir
- source: {
- files: {
- src: ['Gruntfile.js', '<%= srcDir %>/app/**/*.js']
- }
- },
- options: {
- jshintrc: '.jshintrc'
- }
- },
- htmlmin:{
- build: {
- options:{
- removeComments: true,
- collapseWhitespace: true
- },
- expand: true,
- cwd: '<%= tempDir %>',
- src: [
- 'index.html',
- 'app/panels/**/*.html',
- 'app/partials/**/*.html'
- ],
- dest: '<%= tempDir %>'
- }
- },
- cssmin: {
- build: {
- expand: true,
- cwd: '<%= tempDir %>',
- src: '**/*.css',
- dest: '<%= tempDir %>'
- }
- },
- ngmin: {
- 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 %>'
- }
- },
- requirejs: {
- 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();
- }
- }
- }
- },
- uglify: {
- dest: {
- expand: true,
- src: ['**/*.js', '!config.js', '!app/dashboards/*.js'],
- dest: '<%= destDir %>',
- cwd: '<%= destDir %>',
- options: {
- quite: true,
- compress: true,
- preserveComments: false,
- banner: '<%= meta.banner %>'
- }
- }
- },
- 'git-describe': {
- me: {
- // Target-specific file lists and/or options go here.
- },
- },
- compress: {
- 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'
- }
- ]
- }
- },
- s3: {
- dist: {
- bucket: 'download.elasticsearch.org',
- access: 'private',
- // debug: true, // uncommment to prevent actual upload
- upload: [
- {
- src: '<%= tempDir %>/<%= pkg.name %>-latest.zip',
- dest: 'kibana/kibana/<%= pkg.name %>-latest.zip',
- },
- {
- src: '<%= tempDir %>/<%= pkg.name %>-latest.tar.gz',
- dest: 'kibana/kibana/<%= pkg.name %>-latest.tar.gz',
- }
- ]
- }
- }
- };
- // setup the modules require will build
- var requireModules = config.requirejs.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');
- });
- // Run jshint
- grunt.registerTask('default', ['jshint:source', 'less:src']);
- // 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');
- });
- // build, then zip and upload to s3
- grunt.registerTask('distribute', [
- 'distribute:load_s3_config',
- 'build',
- 'compress:zip',
- 'compress:tgz',
- 's3:dist',
- '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
- });
- });
- // load plugins
- grunt.loadNpmTasks('grunt-s3');
- grunt.loadNpmTasks('grunt-ngmin');
- grunt.loadNpmTasks('grunt-contrib-copy');
- grunt.loadNpmTasks('grunt-contrib-less');
- grunt.loadNpmTasks('grunt-git-describe');
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-cssmin');
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-string-replace');
- grunt.loadNpmTasks('grunt-contrib-htmlmin');
- grunt.loadNpmTasks('grunt-contrib-requirejs');
- grunt.loadNpmTasks('grunt-contrib-compress');
- // pass the config to grunt
- grunt.initConfig(config);
- };
|