bumped
Version:
Makes easy release software.
104 lines (83 loc) • 2.9 kB
text/coffeescript
os = require 'os'
path = require 'path'
async = require 'async'
semver = require 'semver'
fs = require 'fs-extra'
MSG = require './Bumped.messages'
DEFAULT = require './Bumped.default'
module.exports = class Semver
constructor: (bumped) ->
= bumped
sync: =>
[opts, cb] = DEFAULT.args arguments
async.compose(, ) (err, max) =>
._version = max
cb()
versions: (cb) =>
async.map .config.rc.files, (file, next) ->
version = require(path.resolve file).version
next null, version
, cb
max: (versions, cb) ->
initial = versions.shift()
async.reduce versions, initial, (max, version, next) ->
max = version if semver.gt version, max
next null, max
, cb
release: =>
[opts, cb] = DEFAULT.args arguments
return .logger.errorHandler MSG.NOT_VALID_VERSION(opts.version), cb unless opts.version
._version ?= '0.0.0'
if opts.version
bumpedVersion =
else
bumpedVersion =
tasks = [
(next) =>
opts.type = 'prerelease'
.plugins.exec opts, next
(next) ->
bumpedVersion opts.version, next
(newVersion, next) =>
._oldVersion = ._version
version:newVersion, outputMessage: opts.outputMessage, next
(next) =>
opts.type = 'postrelease'
.plugins.exec opts, next
]
async.waterfall tasks, (err) =>
return .logger.errorHandler err, cb if err
cb null, ._version
update: ->
[opts, cb] = DEFAULT.args arguments
._version = opts.version
async.each .config.rc.files, , (err) =>
return .logger.errorHandler err, cb if err
.logger.success MSG.CREATED_VERSION ._version if opts.outputMessage
cb()
save: (file, cb) =>
.util.updateJSON
filename : file
property : 'version'
value : ._version
, cb
version: =>
[opts, cb] = DEFAULT.args arguments
if opts.outputMessage
if ._version?
.logger.info MSG.CURRENT_VERSION ._version
else
.logger.warn MSG.NOT_CURRENT_VERSION()
return cb ._version
isSemverWord: (word) ->
[ 'major', 'premajor', 'minor', 'preminor'
'patch', 'prepatch', 'prerelease' ].indexOf(word) isnt -1
_releasesBasedOnSemver: (keyword, cb) =>
cb null, semver.inc(._version, keyword)
_releasesBasedOnVersion: (version, cb) =>
version = semver.clean version
version = semver.valid version
return cb MSG.NOT_VALID_VERSION version unless version?
return cb MSG.NOT_GREATER_VERSION(version, ._version) unless semver.gt version, ._version
cb null, version