ionic-version
Version:
Version your Ionic app in a `npm version` fashion.
139 lines (105 loc) • 3.66 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.version = version;
var _cordovaConfig = require("cordova-config");
var _cordovaConfig2 = _interopRequireDefault(_cordovaConfig);
var _chalk = require("chalk");
var _chalk2 = _interopRequireDefault(_chalk);
var _child_process = require("child_process");
var _child_process2 = _interopRequireDefault(_child_process);
var _path = require("path");
var _path2 = _interopRequireDefault(_path);
var _resolveFrom = require("resolve-from");
var _resolveFrom2 = _interopRequireDefault(_resolveFrom);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* Custom type definition for Promises
* @typedef Promise
* @property {*} result See the implementing function for the resolve type and description
* @property {Error} result Rejection error object
*/
function log(msg, silent) {
if (!silent) {
console.log("[IV]", _chalk2.default[msg.style || "reset"](msg.text));
}
}
/**
* Versions your app
* @param {Object} program commander/CLI-style options, camelCased
* @param {string} projectPath Path to your Ionic project
* @return {Promise<string|Error>} A promise which resolves with the last commit hash
*/
function version(program, projectPath) {
var programOpts = Object.assign({}, program || {});
var projPath = _path2.default.resolve(process.cwd(), projectPath || programOpts.args[0] || "");
var appPkgJSONPath = _path2.default.join(projPath, "package.json");
var appPkg = void 0;
try {
(0, _resolveFrom2.default)(projPath, "@ionic/app-scripts");
appPkg = require(appPkgJSONPath);
} catch (err) {
if (err.message === "Cannot find module '@ionic/app-scripts'") {
log({
style: "red",
text: "Is this the right folder? " + err.message + " in " + projPath
});
} else {
log({
style: "red",
text: err.message
});
log({
style: "red",
text: "Is this the right folder? Looks like there isn't a package.json here."
});
}
log({
style: "yellow",
text: "Pass the project path as an argument, see --help for usage."
});
if (program.outputHelp) {
program.outputHelp();
}
process.exit(1);
}
var cordovaConfig = new _cordovaConfig2.default(_path2.default.join(projPath, "config.xml"));
cordovaConfig.setVersion(appPkg.version);
return cordovaConfig.write().then(function () {
var gitCmdOpts = {
cwd: projPath
};
if (programOpts.amend || process.env.npm_lifecycle_event && process.env.npm_lifecycle_event.indexOf("version") > -1 && !programOpts.neverAmend) {
log({ text: "Amending..." }, programOpts.quiet);
switch (process.env.npm_lifecycle_event) {
case "version":
_child_process2.default.spawnSync("git", ["add", "."], gitCmdOpts);
break;
case "postversion":
default:
_child_process2.default.execSync("git commit -a --amend --no-edit", gitCmdOpts);
if (!programOpts.skipTag) {
log({ text: "Adjusting Git tag..." }, programOpts.quiet);
if (process.platform === "win32") {
_child_process2.default.execSync("git tag -f v" + appPkg.version, gitCmdOpts);
} else {
_child_process2.default.execSync("git tag -f $(git tag --sort=v:refname | tail -1)", gitCmdOpts);
}
}
}
}
log({ style: "green", text: "Done." }, programOpts.quiet);
return _child_process2.default.execSync("git log -1 --pretty=%H", gitCmdOpts).toString();
}).catch(function (err) {
if (process.env.IV_ENV === "ava") {
console.error(err);
}
log({
style: "red",
text: "Done, with errors."
});
process.exit(1);
});
}
exports.default = version;