182 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			182 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*****************************************************************************
 | |
|  * Open MCT, Copyright (c) 2014-2017, United States Government
 | |
|  * as represented by the Administrator of the National Aeronautics and Space
 | |
|  * Administration. All rights reserved.
 | |
|  *
 | |
|  * Open MCT is licensed 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.
 | |
|  *
 | |
|  * Open MCT includes source code licensed under additional open source
 | |
|  * licenses. See the Open Source Licenses file (LICENSES.md) included with
 | |
|  * this source code distribution or the Licensing information page available
 | |
|  * at runtime from the About dialog for additional information.
 | |
|  *****************************************************************************/
 | |
| 
 | |
| /*global require,__dirname*/
 | |
| 
 | |
| require("v8-compile-cache");
 | |
| 
 | |
| var gulp = require('gulp'),
 | |
|     sourcemaps = require('gulp-sourcemaps'),
 | |
|     path = require('path'),
 | |
|     fs = require('fs'),
 | |
|     git = require('git-rev-sync'),
 | |
|     moment = require('moment'),
 | |
|     project = require('./package.json'),
 | |
|     _ = require('lodash'),
 | |
|     paths = {
 | |
|         main: 'openmct.js',
 | |
|         dist: 'dist',
 | |
|         reports: 'dist/reports',
 | |
|         scss: ['./platform/**/*.scss', './example/**/*.scss'],
 | |
|         assets: [
 | |
|             './{example,platform}/**/*.{css,css.map,png,svg,ico,woff,eot,ttf}'
 | |
|         ],
 | |
|         scripts: [ 'openmct.js', 'platform/**/*.js', 'src/**/*.js' ],
 | |
|         specs: [ 'platform/**/*Spec.js', 'src/**/*Spec.js' ],
 | |
|     },
 | |
|     options = {
 | |
|         requirejsOptimize: {
 | |
|             name: 'bower_components/almond/almond.js',
 | |
|             include: paths.main.replace('.js', ''),
 | |
|             wrap: {
 | |
|                 start: (function () {
 | |
|                     var buildVariables = {
 | |
|                         version: project.version,
 | |
|                         timestamp: moment.utc(Date.now()).format(),
 | |
|                         revision: fs.existsSync('.git') ? git.long() : 'Unknown',
 | |
|                         branch: fs.existsSync('.git') ? git.branch() : 'Unknown'
 | |
|                     };
 | |
|                     return fs.readFileSync("src/start.frag", 'utf-8')
 | |
|                         .replace(/@@(\w+)/g, function (match, key) {
 | |
|                             return buildVariables[key];
 | |
|                         });;
 | |
|                 }()),
 | |
|                 endFile: "src/end.frag"
 | |
|             },
 | |
|             optimize: 'uglify2',
 | |
|             uglify2: { output: { comments: /@preserve/ } },
 | |
|             mainConfigFile: paths.main,
 | |
|             wrapShim: true
 | |
|         },
 | |
|         karma: {
 | |
|             configFile: path.resolve(__dirname, 'karma.conf.js'),
 | |
|             singleRun: true
 | |
|         },
 | |
|         sass: {
 | |
|             sourceComments: true
 | |
|         }
 | |
|     };
 | |
| 
 | |
| if (process.env.NODE_ENV === 'development') {
 | |
|     options.requirejsOptimize.optimize = 'none';
 | |
| }
 | |
| 
 | |
| 
 | |
| gulp.task('scripts', function () {
 | |
|     var requirejsOptimize = require('gulp-requirejs-optimize');
 | |
| 
 | |
|     return gulp.src(paths.main)
 | |
|         .pipe(sourcemaps.init())
 | |
|         .pipe(requirejsOptimize(options.requirejsOptimize))
 | |
|         .pipe(sourcemaps.write('.'))
 | |
|         .pipe(gulp.dest(paths.dist));
 | |
| });
 | |
| 
 | |
| gulp.task('test', function (done) {
 | |
|     var karma = require('karma');
 | |
|     new karma.Server(options.karma, done).start();
 | |
| });
 | |
| 
 | |
| gulp.task('stylesheets', function () {
 | |
|     var sass = require('gulp-sass');
 | |
|     var rename = require('gulp-rename');
 | |
|     var bourbon = require('node-bourbon');
 | |
|     options.sass.includePaths = bourbon.includePaths;
 | |
| 
 | |
|     return gulp.src(paths.scss, {base: '.'})
 | |
|         .pipe(sourcemaps.init())
 | |
|         .pipe(sass(options.sass).on('error', sass.logError))
 | |
|         .pipe(rename(function (file) {
 | |
|             file.dirname =
 | |
|                 file.dirname.replace(path.sep + 'sass', path.sep + 'css');
 | |
|             return file;
 | |
|         }))
 | |
|         .pipe(sourcemaps.write('.'))
 | |
|         .pipe(gulp.dest(__dirname));
 | |
| });
 | |
| 
 | |
| gulp.task('lint', function () {
 | |
|     var jshint = require('gulp-jshint');
 | |
|     var merge = require('merge-stream');
 | |
| 
 | |
|     var nonspecs = paths.specs.map(function (glob) {
 | |
|             return "!" + glob;
 | |
|         }),
 | |
|         scriptLint = gulp.src(paths.scripts.concat(nonspecs))
 | |
|             .pipe(jshint()),
 | |
|         specLint = gulp.src(paths.specs)
 | |
|             .pipe(jshint({ jasmine: true }));
 | |
| 
 | |
|     return merge(scriptLint, specLint)
 | |
|         .pipe(jshint.reporter('gulp-jshint-html-reporter', {
 | |
|             filename: paths.reports + '/lint/jshint-report.html',
 | |
|             createMissingFolders : true
 | |
|         }))
 | |
|         .pipe(jshint.reporter('default'))
 | |
|         .pipe(jshint.reporter('fail'));
 | |
| });
 | |
| 
 | |
| gulp.task('checkstyle', function () {
 | |
|     var jscs = require('gulp-jscs');
 | |
|     var mkdirp = require('mkdirp');
 | |
|     var reportName = 'jscs-html-report.html';
 | |
|     var reportPath = path.resolve(paths.reports, 'checkstyle', reportName);
 | |
|     var moveReport = fs.rename.bind(fs, reportName, reportPath, _.noop);
 | |
| 
 | |
|     mkdirp.sync(path.resolve(paths.reports, 'checkstyle'));
 | |
| 
 | |
|     return gulp.src(paths.scripts)
 | |
|         .pipe(jscs())
 | |
|         .pipe(jscs.reporter())
 | |
|         .pipe(jscs.reporter('jscs-html-reporter')).on('finish', moveReport)
 | |
|         .pipe(jscs.reporter('fail'));
 | |
| });
 | |
| 
 | |
| gulp.task('fixstyle', function () {
 | |
|     var jscs = require('gulp-jscs');
 | |
| 
 | |
|     return gulp.src(paths.scripts, { base: '.' })
 | |
|         .pipe(jscs({ fix: true }))
 | |
|         .pipe(gulp.dest('.'));
 | |
| });
 | |
| 
 | |
| gulp.task('assets', ['stylesheets'], function () {
 | |
|     return gulp.src(paths.assets)
 | |
|         .pipe(gulp.dest(paths.dist));
 | |
| });
 | |
| 
 | |
| gulp.task('watch', function () {
 | |
|     return gulp.watch(paths.scss, ['stylesheets', 'assets']);
 | |
| });
 | |
| 
 | |
| gulp.task('serve', function () {
 | |
|     console.log('Running development server with all defaults');
 | |
|     var app = require('./app.js');
 | |
| });
 | |
| 
 | |
| gulp.task('develop', ['serve', 'stylesheets', 'watch']);
 | |
| 
 | |
| gulp.task('install', [ 'assets', 'scripts' ]);
 | |
| 
 | |
| gulp.task('verify', [ 'lint', 'test', 'checkstyle' ]);
 | |
| 
 | |
| gulp.task('build', [ 'verify', 'install' ]); | 
