UNPKG

@process-engine/ci_tools

Version:
114 lines 5.21 kB
"use strict"; 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