Nativefier/gulpfile.babel.js

163 lines
4.5 KiB
JavaScript
Raw Normal View History

2016-01-23 04:47:28 +01:00
import gulp from 'gulp';
import del from 'del';
import sourcemaps from 'gulp-sourcemaps';
import webpack from 'webpack-stream';
import babel from 'gulp-babel';
import runSequence from 'run-sequence';
2016-01-23 05:29:40 +01:00
import path from 'path';
2016-01-23 19:02:23 +01:00
import eslint from 'gulp-eslint';
import mocha from 'gulp-mocha';
2016-02-01 08:23:29 +01:00
import istanbul from 'gulp-istanbul';
import shellJs from 'shelljs';
2016-01-23 05:29:40 +01:00
const PATHS = setUpPaths();
2016-01-23 05:29:40 +01:00
2016-01-23 04:47:28 +01:00
gulp.task('default', ['build']);
gulp.task('build', callback => {
runSequence('clean', ['build-cli', 'build-app', 'build-tests'], callback);
2016-01-23 04:47:28 +01:00
});
2016-01-23 05:29:40 +01:00
gulp.task('build-app', ['build-static'], () => {
return gulp.src(PATHS.APP_MAIN_JS)
.pipe(webpack(require(PATHS.WEBPACK_CONFIG)))
.pipe(gulp.dest(PATHS.APP_DEST));
2016-01-23 04:47:28 +01:00
});
gulp.task('clean', callback => {
2016-01-23 05:29:40 +01:00
del(PATHS.CLI_DEST).then(() => {
del(PATHS.APP_DEST).then(() => {
del(PATHS.TEST_DEST).then(() => {
callback();
});
2016-01-23 04:47:28 +01:00
});
});
});
2016-01-23 05:29:40 +01:00
gulp.task('build-cli', done => {
return gulp.src(PATHS.CLI_SRC_JS)
2016-01-23 04:47:28 +01:00
.pipe(sourcemaps.init())
.pipe(babel())
2016-01-23 05:29:40 +01:00
.on('error', done)
2016-01-23 04:47:28 +01:00
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest('lib'));
});
2016-01-25 05:43:55 +01:00
gulp.task('build-static', ['build-static-js', 'build-static-not-js']);
gulp.task('build-static-not-js', () => {
return gulp.src([PATHS.APP_STATIC_ALL, '!**/*.js'])
.pipe(gulp.dest(PATHS.APP_STATIC_DEST));
});
gulp.task('build-static-js', done => {
return gulp.src(PATHS.APP_STATIC_JS)
.pipe(sourcemaps.init())
.pipe(babel())
.on('error', done)
.pipe(sourcemaps.write('.'))
2016-01-23 05:29:40 +01:00
.pipe(gulp.dest(PATHS.APP_STATIC_DEST));
});
gulp.task('watch', ['build'], () => {
2016-01-23 19:02:23 +01:00
var handleError = function(error) {
2016-01-23 05:29:40 +01:00
console.error(error);
};
gulp.watch(PATHS.APP_ALL, ['build-app'])
.on('error', handleError);
gulp.watch(PATHS.CLI_SRC_JS, ['build-cli'])
.on('error', handleError);
gulp.watch(PATHS.TEST_SRC_JS, ['build-tests'])
.on('error', handleError);
2016-01-23 04:47:28 +01:00
});
2016-01-23 09:01:58 +01:00
gulp.task('publish', done => {
2016-01-29 17:42:47 +01:00
shellExec('npm publish', false, done);
2016-01-23 09:01:58 +01:00
});
gulp.task('release', callback => {
2016-01-25 02:14:49 +01:00
return runSequence('test', 'lint', 'build', 'publish', callback);
2016-01-23 09:01:58 +01:00
});
gulp.task('lint', () => {
2016-02-20 03:39:59 +01:00
return gulp.src(['**/*.js', '!node_modules/**', '!app/node_modules/**', '!app/lib/**', '!lib/**', '!built-tests/**', '!coverage/**'])
2016-01-23 19:02:23 +01:00
.pipe(eslint())
.pipe(eslint.format())
.pipe(eslint.failAfterError());
});
gulp.task('build-tests', done => {
return gulp.src(PATHS.TEST_SRC_JS)
.pipe(sourcemaps.init())
.pipe(babel())
.on('error', done)
.pipe(sourcemaps.write('.'))
.pipe(gulp.dest(PATHS.TEST_DEST));
});
gulp.task('prune', done => {
2016-01-29 17:42:47 +01:00
shellExec('npm prune', true, done);
});
gulp.task('test', callback => {
return runSequence('prune', 'mocha', callback);
});
gulp.task('mocha', ['build'], done => {
gulp.src(PATHS.CLI_DEST_JS)
2016-02-01 08:23:29 +01:00
.pipe(istanbul({includeUntested: true}))
.on('finish', () => {
return gulp.src(PATHS.TEST_DEST_JS, {read: false})
.pipe(mocha())
.pipe(istanbul.writeReports({
dir: './coverage',
reporters: ['lcov'],
reportOpts: {dir: './coverage'}
}))
.on('finish', () => {
done();
});
2016-02-01 08:23:29 +01:00
});
});
gulp.task('ci', callback => {
return runSequence('test', 'lint', callback);
});
2016-01-23 19:02:23 +01:00
function setUpPaths() {
const paths = {
WEBPACK_CONFIG: './webpack.config.js',
APP_SRC: 'app/src',
APP_DEST: 'app/lib',
CLI_SRC: 'src',
CLI_DEST: 'lib',
TEST_SRC: 'test',
TEST_DEST: 'built-tests'
};
paths.APP_MAIN_JS = path.join(paths.APP_SRC, '/main.js');
paths.APP_ALL = paths.APP_SRC + '/**/*';
paths.APP_STATIC_ALL = path.join(paths.APP_SRC, 'static') + '/**/*';
2016-01-25 05:43:55 +01:00
paths.APP_STATIC_JS = path.join(paths.APP_SRC, 'static') + '/**/*.js';
paths.APP_STATIC_DEST = path.join(paths.APP_DEST, 'static');
paths.CLI_SRC_JS = paths.CLI_SRC + '/**/*.js';
2016-02-01 08:23:29 +01:00
paths.CLI_DEST_JS = paths.CLI_DEST + '/**/*.js';
2016-01-28 04:47:40 +01:00
paths.TEST_SRC_JS = paths.TEST_SRC + '/**/*.js';
paths.TEST_DEST_JS = paths.TEST_DEST + '/**/*.js';
return paths;
}
2016-01-29 17:42:47 +01:00
function shellExec(cmd, silent, callback) {
shellJs.exec(cmd, {silent: silent}, (code, stdout, stderr) => {
if (code) {
callback(JSON.stringify({code, stdout, stderr}));
return;
}
callback();
});
}