'use strict';
var gulp = require('gulp'); var add = require('gulp-add'); var del = require('del'); var browserSync = require('browser-sync').create(); var reload = browserSync.reload; var ghPages = require('gulp-gh-pages'); var bower = require('gulp-bower'); var fs = require('fs'); var vinylPaths = require('vinyl-paths'); var execSync = require('child_process').execSync; var merge = require('merge-stream'); var copy = require('gulp-copy'); var bump = require('gulp-bump'); var tagVersion = require('gulp-tag-version'); var git = require('gulp-git'); var filter = require('gulp-filter'); var portfinder = require('portfinder');
function getPackage() {
return JSON.parse(fs.readFileSync('bower.json', 'utf8'));
}
function getBowerConfig() {
if (fs.existsSync('.bowerrc')) { return JSON.parse(fs.readFileSync('.bowerrc', 'utf8')); } return {dir: 'bower_components'};
}
function gitFiles() {
return execSync('git ls-files').toString().split('\n');
}
var bowerDir = getBowerConfig().dir;
gulp.task('clean', function() {
return gulp.src([bowerDir, '.publish', '.tmp']) .pipe(vinylPaths(del));
});
gulp.task('bower', function() {
return bower(bowerDir);
});
gulp.task('bower:reload', ['bower'], reload);
var redirect = function(from, to) {
return function(req, res, next) { if (from === req.url) { res.writeHead(301, { 'Location': to, 'Cache-Control': 'cache-control: private, max-age=0, no-cache' }); res.end(); } next(); };
};
function _bump(type) {
return gulp.src(['bower.json', 'package.json']) .pipe(bump({type: type})) .pipe(gulp.dest('./')) .pipe(git.commit('version bump')) .pipe(filter('package.json')) .pipe(tagVersion({prefix: ''}));
} gulp.task('release', _bump.bind(null, 'patch')); gulp.task('release:minor', _bump.bind(null, 'minor')); gulp.task('release:major', _bump.bind(null, 'major'));
// Watch Files For Changes & Reload gulp.task('serve', ['bower'], function () {
var pkgRoot = '/' + getPackage().name; var opts = { notify: false, snippetOptions: { rule: { match: /<\/body>/i, fn: function(snippet, match) { return snippet + match; } } }, server: { baseDir: bowerDir, middleware: [redirect('/', pkgRoot + '/demo')], routes: {} } }; opts.server.routes[pkgRoot] = '.'; portfinder.basePort = 3000; portfinder.getPort(function (err, port) { opts.port = port; console.log('using port: ' + port); browserSync.init(opts); }); gulp.watch(['**/*.html']).on('change', reload); gulp.watch(['**/*.css']).on('change', reload); //gulp.watch(['bower.json']).on('change', 'bower:reload');
});
gulp.task('gh-pages', function() {
var pkgName = getPackage().name; return merge( gulp.src(gitFiles()) .pipe(copy('.tmp/' + pkgName)), bower('.tmp') .pipe(add( 'index.html', '<meta http-equiv="refresh" content="0;' + pkgName + '/">' )) ).pipe(ghPages()).on('end', function() { del(['.tmp', '.publish']); });
});
// Load tasks for web-component-tester // Adds tasks for `gulp test:local` and `gulp test:remote` require('web-component-tester').gulp.init(gulp);