salesforce-alm
Version:
This package contains tools, and APIs, for an improved salesforce.com developer experience.
84 lines (82 loc) • 3.62 kB
JavaScript
;
/*
* Copyright (c) 2020, salesforce.com, inc.
* All rights reserved.
* Licensed under the BSD 3-Clause license.
* For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
*/
// Local
const cli_ux_1 = require("cli-ux");
const pkgUtils = require("../package/packageUtils");
const Messages = require("../messages");
const messages = Messages();
class PackageVersionPromoteCommand {
constructor() {
this.error = null;
}
execute(context) {
return this._execute(context).catch((err) => {
// until package2 is GA, wrap perm-based errors w/ 'contact sfdc' action (REMOVE once package2 is GA'd)
err = pkgUtils.massageErrorMessage(err);
throw pkgUtils.applyErrorAction(err);
});
}
async _execute(context) {
this.org = context.org;
this.force = context.org.force;
let packageId = pkgUtils.getPackageIdFromAlias(context.flags.package, this.force);
// if no alias found, set the package id as the cli arg.
if (!packageId) {
packageId = context.flags.package;
}
// ID can be 04t or 05i
pkgUtils.validateId([pkgUtils.BY_LABEL.SUBSCRIBER_PACKAGE_VERSION_ID, pkgUtils.BY_LABEL.PACKAGE_VERSION_ID], packageId);
// lookup the 05i ID, if needed
packageId = await pkgUtils.getPackageVersionId(packageId, this.force, this.org);
if (!context.flags.noprompt) {
// Warn when a Managed package has removed metadata
if ((await pkgUtils.getHasMetadataRemoved(packageId, this.force, this.org)) === true) {
cli_ux_1.default.warn(messages.getMessage('hasMetadataRemovedWarning', [], 'package_version_create'));
}
// Prompt for confirmation
let confirmed = false;
const heroku = require('heroku-cli-util');
await heroku
.prompt(messages.getMessage('packageVersionPromoteSetAsReleasedYesNo', context.flags.package, 'package_version_promote'), {})
.then((answer) => {
if (answer.toUpperCase() === 'YES' || answer.toUpperCase() === 'Y') {
confirmed = true;
}
});
if (!confirmed) {
return;
}
}
const request = {};
request.IsReleased = true;
request.Id = packageId;
return this.force
.toolingUpdate(this.org, 'Package2Version', request)
.then(async (updateResult) => {
if (!updateResult.success) {
throw new Error(updateResult.errors);
}
// return the 04t in the success msg
updateResult.id = await pkgUtils.getSubscriberPackageVersionId(packageId, this.force, this.org);
return updateResult;
})
.catch((err) => {
if (err.name === 'DUPLICATE_VALUE' && err.message.includes('previously released')) {
err['message'] = messages.getMessage('previouslyReleasedMessage', [], 'package_version_promote');
err['action'] = messages.getMessage('previouslyReleasedAction', [], 'package_version_promote');
}
throw err;
});
}
getHumanSuccessMessage(result) {
// skip success message when prompt was not accepted
return result ? messages.getMessage('humanSuccess', [result.id], 'package_version_promote') : null;
}
}
module.exports = PackageVersionPromoteCommand;
//# sourceMappingURL=packageVersionPromoteCommand.js.map