diff --git a/.gitignore b/.gitignore index c5d5d1d..9cbd5a5 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ bingkey.txt /.project /keys.js /dist +brouter-web.*.zip diff --git a/bower.json b/bower.json index b243d15..b14cea8 100644 --- a/bower.json +++ b/bower.json @@ -1,6 +1,6 @@ { "name": "brouter-web", - "version": "0.5.0", + "version": "0.6.3", "main": "dist/**/*", "ignore": [ "**/.*", diff --git a/config.js b/config.template.js similarity index 100% rename from config.js rename to config.template.js diff --git a/gulpfile.js b/gulpfile.js index 4393a60..7aee969 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,12 @@ var remember = require('gulp-remember'); var inject = require('gulp-inject'); var gulpif = require('gulp-if'); var gutil = require('gulp-util'); +var zip = require('gulp-zip'); +var bump = require('gulp-bump'); +var semver = require('semver'); +var git = require('gulp-git'); +var replace = require('gulp-replace'); +var release = require('gulp-github-release'); var debug = false; @@ -142,4 +148,90 @@ gulp.task('default', ['clean', 'scripts_config', 'scripts', 'styles', 'images', gulp.task('debug', function() { debug = true; gulp.start('default'); -}); \ No newline at end of file +}); + +var pkg = require('./package.json'); +var tags = {patch: 'patch', minor: 'minor', major: 'major'}; +var nextVersion; +var ghToken; + +gulp.task('release:init', function() { + var tag = gutil.env.tag; + if (!tag) { + gutil.log(gutil.colors.red('--tag is required')); + process.exit(1); + } + if (['major', 'minor', 'patch'].indexOf(tag) < 0) { + gutil.log(gutil.colors.red('--tag must be major, minor or patch')); + process.exit(2); + } + ghToken = gutil.env.token; + if (!ghToken) { + gutil.log(gutil.colors.red('--token is required (github personnal access token)')); + process.exit(3); + } + if (ghToken.length != 40) { + gutil.log(gutil.colors.red('--token length must be 40')); + process.exit(4); + } + git.status({args: '--porcelain', quiet: true}, function(err, stdout) { + if (err) throw err; + if (stdout.length > 0) { + gutil.log(gutil.colors.red('Repository is not clean. Please commit or stash your pending modification')); + process.exit(5); + } + }); + nextVersion = semver.inc(pkg.version, tag); + return; +}); + +gulp.task('bump', ['bump:json', 'bump:html']); + +gulp.task('bump:json', ['release:init'], function() { + gutil.log(gutil.colors.green('Bump to '+nextVersion)); + return(gulp.src(['./package.json', './bower.json']) + .pipe(bump({version: nextVersion})) + .pipe(gulp.dest('./'))); +}); + +gulp.task('bump:html', ['release:init'], function() { + return(gulp.src('./index.html') + .pipe(replace(/(.*)<\/sup>/, ''+nextVersion+'')) + .pipe(gulp.dest('.'))); +}); + +gulp.task('release:commit', ['bump'], function() { + gulp.src(['./index.html', './package.json', './bower.json']) + .pipe(git.commit('release: '+nextVersion)); +}); + +gulp.task('release:tag', ['release:commit'], function() { + return(git.tag(nextVersion, '', function(err) { + if (err) throw err; + })); +}); + +gulp.task('release:push', ['release:tag'], function() { + git.push('origin', 'master', {args: '--tags'}, function(err) { + if (err) throw err; + }); +}); + +gulp.task('release:zip', ['release:tag', 'default'], function() { + gutil.log(gutil.colors.green('Build brouter-web.'+nextVersion+'.zip')); + return(gulp.src(['dist/**', 'index.html', 'config.template.js', 'keys.template.js'], {'base': '.'}) + .pipe(zip('brouter-web.'+nextVersion+'.zip')) + .pipe(gulp.dest('.'))); +}); + +gulp.task('release:publish', ['release:zip'], function() { + gulp.src('./brouter-web.'+nextVersion+'.zip') + .pipe(release({ + tag: nextVersion, + token: ghToken, + manifeste: pkg, + })) +}); + +gulp.task('release', ['release:init', 'bump', 'release:commit', 'release:tag', + 'release:push', 'release:zip', 'release:publish']); \ No newline at end of file diff --git a/keys.js.template b/keys.template.js similarity index 100% rename from keys.js.template rename to keys.template.js diff --git a/package.json b/package.json index c42ff37..ca67dba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "brouter-web", - "version": "0.5.0", + "version": "0.6.3", "description": "Web client for BRouter", "main": "js/index.js", "scripts": { @@ -14,19 +14,25 @@ "devDependencies": { "del": "^1.1.1", "gulp": "^3.8.11", + "gulp-bump": "^2.7.0", "gulp-cached": "^1.0.4", "gulp-concat": "^2.5.2", "gulp-concat-css": "^2.1.2", + "gulp-confirm": "^1.0.6", "gulp-debug": "^2.0.1", + "gulp-git": "^2.2.0", + "gulp-github-release": "^1.2.1", + "gulp-if": "^2.0.0", "gulp-inject": "^1.2.0", "gulp-minify-css": "^1.0.0", "gulp-remember": "^0.3.0", "gulp-rename": "^1.2.0", + "gulp-replace": "^0.5.4", "gulp-sourcemaps": "^1.5.1", "gulp-tap": "^0.1.3", "gulp-uglify": "^1.1.0", - "gulp-if": "^2.0.0", "gulp-util": "^3.0.7", + "gulp-zip": "^4.0.0", "main-bower-files": "^2.6.2" } }