バージョン番号の出力とgitタグの作成

もし、あなたのプロジェクトがセマンティックなバージョンに従っているのであれば、 リリースのための必要な手順を自動化することは良い考えと言えるでしょう。 下記はプロジェクトのバージョンを出力し、gitに変更をコミットして新しいタグを作成する簡易的なレシピです。

var gulp = require('gulp');
var runSequence = require('run-sequence');
var bump = require('gulp-bump');
var gutil = require('gulp-util');
var git = require('gulp-git');
var fs = require('fs');

gulp.task('bump-version', function () {
//注意: ここでは'patch'をハードコードしていますが、
//      minimist (https://www.npmjs.com/package/minimist)を使用して、
//      コマンドライン引数で'major'、'minor'または'patch'を決定するのが良いでしょう。
  return gulp.src(['./bower.json', './package.json'])
    .pipe(bump({type: "patch"}).on('error', gutil.log))
    .pipe(gulp.dest('./'));
});

gulp.task('commit-changes', function () {
  return gulp.src('.')
    .pipe(git.commit('[Prerelease] Bumped version number', {args: '-a'}));
});

gulp.task('push-changes', function (cb) {
  git.push('origin', 'master', cb);
});

gulp.task('create-new-tag', function (cb) {
  var version = getPackageJsonVersion();
  git.tag(version, 'Created Tag for version: ' + version, function (error) {
    if (error) {
      return cb(error);
    }
    git.push('origin', 'master', {args: '--tags'}, cb);
  });

  function getPackageJsonVersion () {
    //requireの代わりにjsonファイルの解析を行います。
    //これは、requireが複数の呼び出しをキャッシュし、
    //バージョン番号が更新されないためです。
    return JSON.parse(fs.readFileSync('./package.json', 'utf8')).version;
  };
});

gulp.task('release', function (callback) {
  runSequence(
    'bump-version',
    'commit-changes',
    'push-changes',
    'create-new-tag',
    function (error) {
      if (error) {
        console.log(error.message);
      } else {
        console.log('RELEASE FINISHED SUCCESSFULLY');
      }
      callback(error);
    });
});

 Back to top

© 2010 - 2017 STUDIO KINGDOM