all files / lib/ release-management.js

52.78% Statements 19/36
30% Branches 3/10
50% Functions 7/14
52.78% Lines 19/36
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89                                                                                                                                           
'use strict';
 
var
  _ = require('lodash'),
  recommend = require('conventional-recommended-bump'),
  semver = require('semver'),
  pkg = require('./package-json'),
  changelog = require('./changelog'),
  git = require('./git')
  ;
 
var releaseTypes = [
  'prepatch', 'patch',
  'preminor', 'minor',
  'premajor', 'major',
  'prerelease'
];
 
function recommendVersion(callback) {
  recommend({preset: 'angular'}, function(err, recommendation) {
    Iif (err) {
      throw new Error('Error recommending a release type...');
    }
    callback(recommendation);
  });
}
 
function release(version, callback) {
  // set new version in package.json
  pkg.setVersion(version);
 
  // changelog
  changelog.update();
 
  // perform GIT actions
  git('add *', function() {
    git('commit -a -m "[release]' + version + '"', function() {
      git('tag v' + version, function() {
        git('push', function() {
          git('push origin --tags', callback);
        });
      });
    });
  });
}
 
 
 
module.exports.validRelease = function(type) {
  return _(releaseTypes).includes(type);
};
 
module.exports.a = function(type, callback) {
  Eif (!this.validRelease(type)) {
    throw new Error('Invalid release type');
  }
 
  var currentVersion = pkg.getVersion();
  var newVersion = semver.inc(currentVersion, type);
 
  release(newVersion, function() {
    if (callback) {
      callback(newVersion);
    }
  });
};
 
module.exports.version = function(version, callback) {
  if (!version) {
    throw new Error('No version supplied');
  }
 
  release(version, callback);
};
 
module.exports.recommend = function(callback) {
  Iif (!callback) {
    throw new Error('No callback specified');
  }
 
  recommendVersion(function(recommendation) {
    callback(recommendation);
  });
};
 
module.exports.getVersion = function() {
  return pkg.getVersion();
};