From 378c4db9a0de9f8e35342522901849dcfeb71b32 Mon Sep 17 00:00:00 2001 From: Manuel Araoz Date: Tue, 13 Jan 2015 18:53:08 -0300 Subject: [PATCH] add release process --- index.js | 168 ++++++++++++++++++++++++++++++++++++++++++++------- package.json | 2 + 2 files changed, 148 insertions(+), 22 deletions(-) diff --git a/index.js b/index.js index 05bbd89..ff499a8 100644 --- a/index.js +++ b/index.js @@ -2,6 +2,24 @@ var gulp = require('gulp'); +var coveralls = require('gulp-coveralls'); +var gutil = require('gulp-util'); +var jshint = require('gulp-jshint'); +var mocha = require('gulp-mocha'); +var rename = require('gulp-rename'); +var runsequence = require('run-sequence'); +var shell = require('gulp-shell'); +var uglify = require('gulp-uglify'); +var bump = require('gulp-bump'); +var git = require('gulp-git'); + +function ignoreerror() { + /* jshint ignore:start */ // using `this` in this context is weird + this.emit('end'); + /* jshint ignore:end */ +} + + /** * @file gulpfile.js * @@ -21,38 +39,26 @@ var gulp = require('gulp'); * ` *
  • `browser` - generate files needed for browser (browserify) * ` *
  • `lint` - run `jshint` *
  • `coverage` - run `istanbul` with mocha to generate a report of test coverage *
  • `coveralls` - updates coveralls info - *
  • `release` - automates release process (only for bitcore maintainers) + *
  • `release` - automates release process (only for maintainers) * */ function startGulp(name) { var fullname = name ? 'bitcore-' + name : 'bitcore'; - var coveralls = require('gulp-coveralls'); - var gutil = require('gulp-util'); - var jshint = require('gulp-jshint'); - var mocha = require('gulp-mocha'); - var rename = require('gulp-rename'); - var runsequence = require('run-sequence'); - var shell = require('gulp-shell'); - var uglify = require('gulp-uglify'); - var files = ['lib/**/*.js']; var tests = ['test/**/*.js']; var alljs = files.concat(tests); - function ignoreerror() { - /* jshint ignore:start */ // using `this` in this context is weird - this.emit('end'); - /* jshint ignore:end */ - } - + /** + * testing + */ var testmocha = function() { return gulp.src(tests).pipe(new mocha({ reporter: 'spec' @@ -63,10 +69,6 @@ function startGulp(name) { './node_modules/karma/bin/karma start' ]); - /** - * testing - */ - gulp.task('test:node', testmocha); gulp.task('test:node:nofail', function() { @@ -168,6 +170,128 @@ function startGulp(name) { gulp.task('watch:browser', function() { return gulp.watch(alljs, ['browser']); }); + + + + /** + * Release automation + */ + + gulp.task('release:install', function() { + return shell.task([ + 'npm install', + ]); + }); + + gulp.task('release:bump', function() { + return gulp.src(['./bower.json', './package.json']) + .pipe(bump({ + type: 'patch' + })) + .pipe(gulp.dest('./')); + }); + + gulp.task('release:checkout-releases', function(cb) { + git.checkout('releases', { + args: '' + }, cb); + }); + + gulp.task('release:merge-master', function(cb) { + git.merge('master', { + args: '' + }, cb); + }); + + gulp.task('release:checkout-master', function(cb) { + git.checkout('master', { + args: '' + }, cb); + }); + + var buildFiles = [fullname + '.js', fullname + '.min.js', './package.json', './bower.json']; + gulp.task('release:add-built-files', function() { + return gulp.src(buildFiles) + .pipe(git.add({ + args: '-f' + })); + }); + + gulp.task('release:build-commit', ['release:add-built-files'], function() { + var pjson = require('./package.json'); + return gulp.src(buildFiles) + .pipe(git.commit('Build: ' + pjson.version, { + args: '' + })); + }); + + gulp.task('release:version-commit', function() { + var pjson = require('./package.json'); + var files = ['./package.json', './bower.json']; + return gulp.src(files) + .pipe(git.commit('Bump package version to ' + pjson.version, { + args: '' + })); + }); + + gulp.task('release:push-releases', function(cb) { + git.push('bitpay', 'releases', { + args: '' + }, cb); + }); + + gulp.task('release:push', function(cb) { + git.push('bitpay', 'master', { + args: '' + }, cb); + }); + + gulp.task('release:push-tag', function(cb) { + var pjson = require('./package.json'); + var name = 'v' + pjson.version; + git.tag(name, 'Release ' + name, function() { + git.push('bitpay', name, cb); + }); + }); + + gulp.task('release:publish', shell.task([ + 'npm publish' + ])); + + // requires https://hub.github.com/ + gulp.task('release', function(cb) { + runsequence( + // Checkout the `releases` branch + ['release:checkout-releases'], + // Merge the master branch + ['release:merge-master'], + // Run npm install + ['release:install'], + // Build browser bundle + ['browser:compressed'], + // Run tests with gulp test + ['test'], + // Update package.json and bower.json + ['release:bump'], + // Commit + ['release:build-commit'], + // Run git push bitpay $VERSION + ['release:push-tag'], + // Push to releases branch + ['release:push-releases'], + // Run npm publish + ['release:publish'], + // Checkout the `master` branch + ['release:checkout-master'], + // Bump package.json and bower.json, again + ['release:bump'], + // Version commit with no binary files to master + ['release:version-commit'], + // Push to master + ['release:push'], + cb); + }); + } module.exports = startGulp; diff --git a/package.json b/package.json index ee967d2..a31c9bc 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ "brfs": "^1.2.0", "browserify": "~6.3.3", "gulp": "^3.8.10", + "gulp-bump": "^0.1.11", "gulp-coveralls": "^0.1.3", + "gulp-git": "^0.5.5", "gulp-jshint": "^1.9.0", "gulp-mocha": "^2.0.0", "gulp-rename": "^1.2.0",