angular-egg
Version:
An AngularJS Directive implementation of egg.js by Mike Flynn
269 lines (230 loc) • 6.62 kB
JavaScript
/* jshint ignore:start */
var fs = require('fs'),
gulp = require('gulp'),
sh = require('shelljs'),
bower = require('bower'),
del = require('del'),
vinylPaths = require('vinyl-paths'),
runSequence = require('run-sequence'),
stylish = require('jshint-stylish'),
gulpLoadPlugins = require('gulp-load-plugins'),
plugins = gulpLoadPlugins({ camelize: true }),
basePkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
//===============================================
// Install
//===============================================
gulp.task('check:git', function(done) {
if (!sh.which('git')) {
console.log(
' ' + plugins.util.colors.red('Git is not installed.'),
'\n Download git here:', plugins.util.colors.cyan('http://git-scm.com/downloads') + '.'
);
process.exit(1);
}
done();
});
gulp.task('prune:bower', function() {
return bower.commands.prune()
.on('log', function(data) {
plugins.util.log('bower', plugins.util.colors.cyan(data.id), data.message);
});
});
gulp.task('install:bower', function() {
return bower.commands.install()
.on('log', function(data) {
plugins.util.log('bower', plugins.util.colors.cyan(data.id), data.message);
});
});
//===============================================
// Helpers
//===============================================
// Notify error
function getErrorHandler() {
return plugins.notify.onError(function(error) {
console.error(error.message);
return error.message;
});
}
//===============================================
// Pre-build tasks
//===============================================
/*
Clean
*/
gulp.task('clean:before', function() {
return gulp.src(['./release/**/*.*'])
.pipe(vinylPaths(del))
.on('error', getErrorHandler());
});
/*
Lint the JavaScript
*/
gulp.task('lint:js', function() {
return gulp.src('./src/js/**/*.js')
.pipe(plugins.jshint())
.on('error', getErrorHandler())
.pipe(plugins.jshint.reporter(stylish))
.on('error', getErrorHandler());
});
/*
Test the JavaScript.
*/
gulp.task('test:js', function(cb) {
var Server = require('karma').Server,
src = [
'./bower_components/jquery/dist/jquery.js',
'./bower_components/angular/angular.js',
'./bower_components/angular-mocks/angular-mocks.js',
'./src/js/**/*.js'
];
new Server({
files : src,
configFile: __dirname + '/test/config/karma.conf.js',
singleRun : true
}, cb).start();
});
//===============================================
// Documentation
//===============================================
/*
Generate the documentation
*/
gulp.task('doc:js', [], function () {
var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8')),
gulpDocs = require('gulp-ngdocs'),
options = {
// startPage: '/api',
// titleLink: '/api',
title: pkg.name,
image: '../lib/img/logo.png',
imageLink: pkg.homepage
};
return gulp.src('./src/**/*.js')
.pipe(gulpDocs.process(options))
.pipe(gulp.dest('./docs/'))
.on('error', getErrorHandler());
});
//===============================================
// Build tasks
//===============================================
/*
Bump the version
*/
function bump(type) {
return gulp.src(['./package.json'])
.pipe(plugins.bump({ type: type }))
.pipe(gulp.dest('./'))
.on('error', getErrorHandler());
}
gulp.task('bump:prerelease', function() {
return bump('prerelease');
});
gulp.task('bump:patch', function() {
return bump('patch');
});
gulp.task('bump:minor', function() {
return bump('minor');
});
gulp.task('bump:major', function() {
return bump('major');
});
/*
Update the persistent build number
*/
gulp.task('update:build', function () {
var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8'));
return gulp.src('./package.json')
.pipe(plugins.jsonEditor({
'build': parseInt(pkg.build, 10) + 1,
'copyright': pkg.organisation + ' ' + new Date().getFullYear(),
'timestamp': new Date().getTime()
}, {
'indent_char': '\t',
'indent_size': 1
}))
.pipe(gulp.dest('./'))
.on('error', getErrorHandler());
});
/*
Auto annotate the JavaScript and copy to ./release.
*/
gulp.task('annotate:js', function () {
return gulp.src('./src/js/**/!(*spec|*mock).js')
.pipe(plugins.ngAnnotate({
remove: true,
add: true,
single_quotes: true
}))
.pipe(plugins.rename(basePkg.name + '.js'))
.pipe(gulp.dest('./release/'))
.on('error', getErrorHandler());
});
/*
Minify/uglify the JavaScript
*/
gulp.task('uglify:js', function() {
return gulp.src(['./release/' + basePkg.name + '.js'])
.pipe(plugins.sourcemaps.init())
.pipe(plugins.uglify())
.pipe(plugins.rename(basePkg.name + '.min.js'))
.pipe(plugins.sourcemaps.write('.'))
.pipe(gulp.dest('./release'))
.on('error', getErrorHandler());
});
/*
Add a header comment block
*/
gulp.task('header:js', function() {
var pkg = JSON.parse(fs.readFileSync('./package.json', 'utf8')),
banner = ['/**',
' * <%= pkg.name %> - <%= pkg.description %>',
' * @author <%= pkg.author %>',
' * @version v<%= pkg.version %>',
' * @build <%= pkg.build %> - ' + new Date(),
' * @link <%= pkg.homepage %>',
' * @license <%= pkg.license %>',
' */',
''].join('\n');
return gulp.src(['./release/*.js'])
.pipe(plugins.header(banner, { pkg : pkg } ))
.pipe(gulp.dest('./release'))
.on('error', getErrorHandler());
});
//===============================================
// Sequenced tasks
//===============================================
function generateBuild(bump, cb) {
runSequence(
'check:git',
'prune:bower',
'install:bower',
'lint:js',
'test:js',
'clean:before',
bump,
'update:build',
'annotate:js',
'uglify:js',
'header:js',
'doc:js', cb);
}
gulp.task('default', function(cb) {
console.info('\nDevelopment build\n');
generateBuild('bump:prerelease', cb);
});
gulp.task('patch', function(cb) {
console.info('\nPatch build\n');
generateBuild('bump:patch', cb);
});
gulp.task('build', function(cb) {
console.info('\nMinor build\n');
generateBuild('bump:minor', cb);
});
gulp.task('release', function(cb) {
console.info('\nMajor build\n');
generateBuild('bump:major', cb);
});
//===============================================
// End of file
//===============================================
/* jshint ignore:end */