utils.detect_language(function(language){ if(_.isUndefined(language)){ logger.error("Unable to detect language ... exiting!"); process.exit(1); } var options = nomnom.script(pkg.name).options(_.merge({ level: { position: 0, help: "Level to bump version [major | minor | patch | pre]", choices: ["major", "minor", "patch", "pre"], default: "patch" }, "prerelease-identifier": { help: "Identifier appened to version for prerelase builds", choices: ["alpha", "beta", "rc"], default: "rc" }, "tag": { help: "Create a git tag for this release", flag: true, default: true } }, language.options)).parse(); language.configuration = options; utils.git.initialize(); async.series({ update_version: function(fn){ language.update_version(function(err){ if(err) return fn(err); else{ logger.info(["Updated to version", language.version.new].join(" ")); return fn(); } }); }, post_update: function(fn){ language.post_update(function(err, messages){ if(err) return fn(err); else{ _.each(messages, function(message){ logger.info(message); }); return fn(); } }); }, commit: function(fn){ utils.git.commit(language.version.new, function(err){ if(err) return fn(err); else{ logger.info("Committed changes!"); return fn(); } }); }, post_commit: function(fn){ language.post_commit(function(err, messages){ if(err) return fn(err); else{ _.each(messages, function(message){ logger.info(message); }); return fn(); } }); }, tag: function(fn){ if(options.tag){ utils.git.tag(language.version.new, function(err){ if(err) return fn(err); else{ logger.info(["Created git tag", language.version.new].join(" ")); return fn(); } }); } else{ return fn(); } }, post_tag: function(fn){ language.post_tag(function(err, messages){ if(err) return fn(err); else{ _.each(messages, function(message){ logger.info(message); }); return fn(); } }); } }, function(err){ if(err){ logger.error(err.message); async.series([ function(fn){ utils.git.delete_tag(language.version.new, function(err){ if(_.isNull(err)) logger.warn(["Successfully deleted git tag", language.version.new].join(" ")); return fn(); }); }, function(fn){ language.restore_version(function(err){ if(err) logger.error(["Error rolling back to version", language.version.original].join(" ")); else logger.warn(["Successfully rolled back to version", language.version.original].join(" ")); return fn(); }); } ], function(){ logger.error(["Failed to update to version", language.version.new].join(" ")); process.exit(1); }); } else{ logger.info(["Successfully updated to version", language.version.new].join(" ")); } }); });