UNPKG

vtex

Version:

The platform for e-commerce apps

93 lines (92 loc) 4.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.supportedTagNames = exports.supportedReleaseTypes = exports.releaseTypeAliases = void 0; const tslib_1 = require("tslib"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const ramda_1 = require("ramda"); const semver_1 = tslib_1.__importDefault(require("semver")); const logger_1 = tslib_1.__importDefault(require("../../api/logger")); const utils_1 = require("./utils"); exports.releaseTypeAliases = { pre: 'prerelease', }; exports.supportedReleaseTypes = ['major', 'minor', 'patch', 'prerelease']; exports.supportedTagNames = ['stable', 'beta', 'hkignore']; const releaseTypesToUpdateChangelog = ['major', 'minor', 'patch']; const tagNamesToUpdateChangelog = ['stable']; const shouldUpdateChangelog = (releaseType, tagName) => { return ((releaseTypesToUpdateChangelog.indexOf(releaseType) >= 0 && tagNamesToUpdateChangelog.indexOf(tagName) >= 0) || semver_1.default.valid(releaseType)); }; const getNewAndOldVersions = (utils, releaseType, tagName) => { if (semver_1.default.valid(releaseType)) { // If `releaseType` is a valid (semver) version, use it. const oldVersion = utils.readVersion(); const newVersion = semver_1.default.parse(releaseType).version; if (!semver_1.default.gt(newVersion, oldVersion)) { // TODO: Remove the below log.error when toolbelt has better error handling. logger_1.default.error(`The new version has to be greater than the old one: \ ${newVersion} <= ${oldVersion}`); throw new Error(`The new version has to be greater than the old one: \ ${newVersion} <= ${oldVersion}`); } return [oldVersion, newVersion]; } // Else `releaseType` is just a regular release type. Then we increment the // actual version. // Check if releaseType is valid. if (ramda_1.indexOf(releaseType, exports.supportedReleaseTypes) === -1) { // TODO: Remove the below log.error when toolbelt has better error handling. logger_1.default.error(`Invalid release type: ${releaseType} Valid release types are: ${exports.supportedReleaseTypes.join(', ')}`); throw new Error(`Invalid release type: ${releaseType} Valid release types are: ${exports.supportedReleaseTypes.join(', ')}`); } // Check if tagName is valid. if (ramda_1.indexOf(tagName, exports.supportedTagNames) === -1) { // TODO: Remove the below log.error when toolbelt has better error handling. logger_1.default.error(`Invalid release tag: ${tagName} Valid release tags are: ${exports.supportedTagNames.join(', ')}`); throw new Error(`Invalid release tag: ${tagName} Valid release tags are: ${exports.supportedTagNames.join(', ')}`); } const oldVersion = utils.readVersion(); const newVersion = utils.incrementVersion(oldVersion, releaseType, tagName); return [oldVersion, newVersion]; }; exports.default = async (releaseType = 'patch', // This arg. can also be a valid (semver) version. tagName = 'beta') => { const utils = new utils_1.ReleaseUtils(); utils.checkGit(); utils.checkIfInGitRepo(); const normalizedReleaseType = ramda_1.prop(releaseType, exports.releaseTypeAliases) || releaseType; const [oldVersion, newVersion] = getNewAndOldVersions(utils, normalizedReleaseType, tagName); logger_1.default.info(`Old version: ${chalk_1.default.bold(oldVersion)}`); logger_1.default.info(`New version: ${chalk_1.default.bold.yellow(newVersion)}`); const [month, day, year] = new Date() .toLocaleDateString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' }) .split('/'); // Pachamama v2 requires that version tags start with a 'v' character. const tagText = `v${newVersion}`; const changelogVersion = `\n\n## [${newVersion}] - ${year}-${month}-${day}`; if (!(await utils.confirmRelease())) { // Abort release. return; } logger_1.default.info('Starting release...'); try { await utils.preRelease(); await utils.bump(newVersion); if (shouldUpdateChangelog(normalizedReleaseType, tagName)) { utils.updateChangelog(changelogVersion); } await utils.add(); await utils.commit(tagText); await utils.tag(tagText); await utils.push(tagText); await utils.postRelease(); } catch (e) { logger_1.default.error(`Failed to release \n${e}`); } };