openmct/gulpfile.js

167 lines
5.3 KiB
JavaScript
Raw Normal View History

/*****************************************************************************
* Open MCT Web, Copyright (c) 2014-2015, United States Government
* as represented by the Administrator of the National Aeronautics and Space
* Administration. All rights reserved.
*
* Open MCT Web 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 Web 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.
*****************************************************************************/
2016-01-27 22:30:07 +00:00
/*global require,__dirname*/
var gulp = require('gulp'),
requirejsOptimize = require('gulp-requirejs-optimize'),
sourcemaps = require('gulp-sourcemaps'),
rename = require('gulp-rename'),
sass = require('gulp-sass'),
bourbon = require('node-bourbon'),
2016-01-28 21:44:18 +00:00
jshint = require('gulp-jshint'),
2016-01-28 22:33:57 +00:00
jscs = require('gulp-jscs'),
2016-01-29 01:08:02 +00:00
replace = require('gulp-replace-task'),
2016-01-27 22:30:07 +00:00
karma = require('karma'),
path = require('path'),
fs = require('fs'),
git = require('git-rev-sync'),
moment = require('moment'),
project = require('./package.json'),
paths = {
main: 'main.js',
dist: 'dist',
assets: 'dist/assets',
scss: ['./platform/**/*.scss', './example/**/*.scss'],
scripts: [ 'main.js', 'platform/**/*.js', 'src/**/*.js' ],
2016-03-04 19:52:46 +00:00
specs: [ 'platform/**/*Spec.js', 'src/**/*Spec.js' ],
static: [
'index.html',
2016-01-28 23:23:17 +00:00
'platform/**/*',
'example/**/*',
'bower_components/**/*'
]
},
options = {
requirejsOptimize: {
name: paths.main.replace(/\.js$/, ''),
mainConfigFile: paths.main,
wrapShim: true
2016-01-27 22:30:07 +00:00
},
2016-03-04 19:56:31 +00:00
jshint: {
"bitwise": true,
"curly": true,
"eqeqeq": true,
"freeze": true,
"funcscope": true,
"futurehostile": true,
"latedef": true,
"noarg": true,
"nocomma": true,
"nonbsp": true,
"nonew": true,
"predef": [
"define",
"Blob",
"Float32Array",
"Promise"
],
"strict": "implied",
"undef": true,
"unused": true
},
2016-01-27 22:30:07 +00:00
karma: {
configFile: path.resolve(__dirname, 'karma.conf.js'),
singleRun: true
},
sass: {
includePaths: bourbon.includePaths
2016-01-29 01:08:02 +00:00
},
replace: {
variables: {
version: project.version,
timestamp: moment.utc(Date.now()).format(),
revision: fs.existsSync('.git') ? git.long() : 'Unknown',
branch: fs.existsSync('.git') ? git.branch() : 'Unknown'
2016-01-29 01:08:02 +00:00
}
}
};
gulp.task('scripts', function () {
2016-01-27 22:30:40 +00:00
return gulp.src(paths.main)
.pipe(sourcemaps.init())
.pipe(requirejsOptimize(options.requirejsOptimize))
.pipe(sourcemaps.write('.'))
2016-01-29 01:08:02 +00:00
.pipe(replace(options.replace))
2016-02-23 03:07:36 +00:00
.pipe(gulp.dest(paths.dist));
2016-01-27 22:30:07 +00:00
});
gulp.task('test', function (done) {
new karma.Server(options.karma, done).start();
});
gulp.task('stylesheets', function () {
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('/sass', '/css');
return file;
}))
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(__dirname));
});
2016-01-28 21:44:18 +00:00
gulp.task('lint', function () {
2016-03-04 19:52:46 +00:00
var nonspecs = paths.specs.map(function (glob) {
return "!" + glob;
});
return gulp.src(paths.scripts.concat(nonspecs))
2016-03-04 19:56:31 +00:00
.pipe(jshint(options.jshint))
2016-01-28 21:44:18 +00:00
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'));
});
2016-01-28 22:33:57 +00:00
gulp.task('checkstyle', function () {
2016-01-28 22:33:57 +00:00
return gulp.src(paths.scripts)
.pipe(jscs())
.pipe(jscs.reporter())
.pipe(jscs.reporter('fail'));
});
2016-01-28 22:39:14 +00:00
gulp.task('fixstyle', function () {
return gulp.src(paths.scripts, { base: '.' })
.pipe(jscs({ fix: true }))
.pipe(gulp.dest('.'));
});
gulp.task('static', ['stylesheets'], function () {
return gulp.src(paths.static, { base: '.' })
.pipe(gulp.dest(paths.dist));
});
gulp.task('watch', function () {
gulp.watch(paths.scss, ['stylesheets']);
});
gulp.task('serve', function () {
console.log('Running development server with all defaults');
var app = require('./app.js');
});
gulp.task('develop', ['serve', 'stylesheets', 'watch']);
2016-01-29 19:54:18 +00:00
gulp.task('install', [ 'static', 'scripts' ]);
2016-01-29 18:15:34 +00:00
2016-01-29 19:54:18 +00:00
gulp.task('verify', [ 'lint', 'test' ]);
gulp.task('build', [ 'verify', 'install' ]);