@process-engine/ci_tools
Version:
CI tools for process-engine.io
114 lines • 5.21 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.printHelp = exports.getShortDoc = exports.run = void 0;
const yargsParser = require("yargs-parser");
const chalk = require("chalk");
const create_changelog_1 = require("./internal/create-changelog");
const git_1 = require("../git/git");
const package_version_1 = require("../versions/package_version");
const git_helpers_1 = require("../versions/git_helpers");
const setup_git_and_npm_connections_1 = require("./internal/setup-git-and-npm-connections");
const shell_1 = require("../cli/shell");
const retry_run_1 = require("../versions/retry_run");
const printMultiLineString_1 = require("../cli/printMultiLineString");
const modes_1 = require("../contracts/modes");
const COMMAND_NAME = 'commit-and-tag-version';
const BADGE = `[${COMMAND_NAME}]\t`;
const DEFAULT_MODE = 'node';
const DOC = `
Commits, tags and pushes the current version (when on one of the applicable branches).
`;
// DOC: see above
async function run(...args) {
const argv = yargsParser(args, { alias: { help: ['h'] }, default: { mode: DEFAULT_MODE } });
const isDryRun = argv.dry === true;
const isForced = process.env.CI_TOOLS_FORCE_PUBLISH === 'true' || argv.force === true;
const mode = argv.mode;
(0, setup_git_and_npm_connections_1.setupGit)();
await printInfo(mode, isDryRun, isForced);
if (await (0, retry_run_1.isRedundantRunTriggeredBySystemUserPush)(mode)) {
const currentVersionTag = (0, package_version_1.getPackageVersionTag)(mode);
console.error(chalk.yellow(`${BADGE}Current commit is tagged with "${currentVersionTag}".`));
console.error(chalk.yellowBright(`${BADGE}Nothing to do here, since this is the current package version!`));
process.exit(0);
}
if (await (0, retry_run_1.isRetryRunForPartiallySuccessfulBuild)(mode)) {
console.error(chalk.yellow(`${BADGE}This seems to be a retry run for a partially successful build.`));
console.error(chalk.yellowBright(`${BADGE}Nothing to do here!`));
process.exit(0);
}
annotatedSh('git config user.name');
annotatedSh('git config user.email');
const packageVersion = await (0, package_version_1.getPackageVersion)(mode);
const preVersionTag = await (0, git_helpers_1.getPrevVersionTag)(mode);
const changelogText = await (0, create_changelog_1.getChangelogText)(mode, preVersionTag);
if (isDryRun) {
console.log(`${BADGE}Would commit version ${packageVersion} and tag the commit as "v${packageVersion}".`);
console.log(`${BADGE}Skipping since this is a dry run!`);
return true;
}
const commitSuccessful = pushCommitAndTagCurrentVersion(mode, packageVersion, changelogText);
if (commitSuccessful) {
console.log(chalk.greenBright(`${BADGE}Committed version ${packageVersion} and tagged that commit as "v${packageVersion}"`));
}
return true;
}
exports.run = run;
function getShortDoc() {
return DOC.trim().split('\n')[0];
}
exports.getShortDoc = getShortDoc;
function printHelp() {
console.log(`Usage: ci_tools ${COMMAND_NAME} <package-pattern> [<package-pattern>...] [--dry] [--force]`);
console.log('');
console.log(DOC.trim());
}
exports.printHelp = printHelp;
function annotatedSh(cmd) {
console.log(`${BADGE}|>>> ${cmd}`);
const output = (0, shell_1.sh)(cmd);
(0, printMultiLineString_1.printMultiLineString)(output, `${BADGE}| `);
return output;
}
async function printInfo(mode, isDryRun, isForced) {
const packageVersion = await (0, package_version_1.getPackageVersion)(mode);
const packageVersionTag = await (0, package_version_1.getPackageVersionTag)(mode);
const branchName = (0, git_1.getGitBranch)();
console.log(`${BADGE}isDryRun:`, isDryRun);
console.log(`${BADGE}isForced:`, isForced);
console.log('');
console.log(`${BADGE}packageVersion:`, packageVersion);
console.log(`${BADGE}packageVersionTag:`, packageVersionTag);
console.log(`${BADGE}branchName:`, branchName);
console.log('');
}
function pushCommitAndTagCurrentVersion(mode, currentVersion, changelogText) {
const branchName = (0, git_1.getGitBranch)();
const currentVersionTag = `v${currentVersion}`;
(0, shell_1.sh)(`git checkout ${branchName}`);
addPackageFilesToGit(mode);
(0, shell_1.sh)('git status');
(0, git_1.gitCommit)(`Release ${currentVersionTag}\n\n${changelogText}\n\n[skip ci]`);
(0, git_1.gitTag)(currentVersionTag);
(0, git_1.gitPush)('origin', branchName);
(0, git_1.gitPushTags)();
// TODO: we should check if these were successful!
return true;
}
function addPackageFilesToGit(mode) {
switch (mode) {
case modes_1.PACKAGE_MODE_DOTNET:
(0, git_1.gitAdd)('*.csproj');
break;
case modes_1.PACKAGE_MODE_NODE:
(0, git_1.gitAdd)('package.json');
(0, git_1.gitAdd)('package-lock.json');
break;
case modes_1.PACKAGE_MODE_PYTHON:
(0, git_1.gitAdd)('setup.py');
break;
default:
throw new Error(`Unknown value for \`mode\`: ${mode}`);
}
}
//# sourceMappingURL=commit-and-tag-version.js.map
;