UNPKG

@process-engine/ci_tools

Version:
183 lines (181 loc) 7.76 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.printHelp = exports.getShortDoc = exports.run = void 0; const chalk = require("chalk"); const fs = require("fs"); const fs_1 = require("fs"); const yargsParser = require("yargs-parser"); const git_1 = require("../git/git"); const git_helpers_1 = require("../versions/git_helpers"); const package_version_1 = require("../versions/package_version"); const printMultiLineString_1 = require("../cli/printMultiLineString"); const shell_1 = require("../cli/shell"); const modes_1 = require("../contracts/modes"); const dotnet_1 = require("../versions/package_version/dotnet"); const COMMAND_NAME = 'copy-and-commit-version-for-subpackage'; const BADGE = `[${COMMAND_NAME}]\t`; const DEFAULT_MODE = 'node'; const DOC = ` Copies the version from the main package to a subpackage and commits the change. OPTIONS --mode sets the package mode [dotnet, node, python] (default: node) `; // DOC: see above async function run(...args) { const argv = yargsParser(args, { alias: { help: ['h'] }, default: { mode: DEFAULT_MODE } }); const isDryRun = args.indexOf('--dry') !== -1; const isForced = process.env.CI_TOOLS_FORCE_PUBLISH === 'true' || args.indexOf('--force') !== -1; const mode = argv.mode; const subpackageLocation = getSubpackageLocationFromArgs(args); const mainPackageVersion = await (0, package_version_1.getPackageVersion)(mode); await printInfo(mode, mainPackageVersion, isDryRun, isForced); const subpackageLocationWithSlash = subpackageLocation.endsWith('/') ? subpackageLocation : `${subpackageLocation}/`; await abortIfRetryRun(mode, mainPackageVersion, subpackageLocationWithSlash); abortIfSubpackageLocationIsMissing(subpackageLocation); abortIfDryRun(mainPackageVersion, isDryRun, isForced); const cwd = process.cwd(); process.chdir(subpackageLocationWithSlash); await (0, package_version_1.setPackageVersion)(mode, mainPackageVersion); process.chdir(cwd); const branchName = (0, git_1.getGitBranch)(); const filename = getSubpackageFilename(mode, subpackageLocationWithSlash); (0, git_1.gitAdd)(`${subpackageLocationWithSlash}${filename}`); (0, shell_1.sh)('git status'); const subpackageName = await getSubpackageName(mode, subpackageLocationWithSlash); (0, git_1.gitCommit)(`Update ${subpackageName} version to v${mainPackageVersion}\n\n[skip ci]`); (0, git_1.gitPush)('origin', branchName); 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} <subpackageLocation> [--dry] [--force] [--mode <MODE>]`); console.log(''); console.log(DOC.trim()); } exports.printHelp = printHelp; async function abortIfRetryRun(mode, mainPackageVersion, subpackageLocation) { const subpackageVersion = await getSubpackageVersion(mode, subpackageLocation); if (subpackageVersion === mainPackageVersion) { console.error(chalk.yellow(`${BADGE}Subpackage version is already "${mainPackageVersion}".`)); console.error(chalk.yellowBright(`${BADGE}Nothing to do here, since this is the current package version!`)); process.exit(0); } } async function getSubpackageVersion(mode, subpackageLocation) { const cwd = process.cwd(); process.chdir(subpackageLocation); const subpackageVersion = await (0, package_version_1.getPackageVersion)(mode); process.chdir(cwd); return subpackageVersion; } async function getSubpackageName(mode, subpackageLocation) { const subpackage = await getSubpackage(mode, subpackageLocation); switch (mode) { case modes_1.PACKAGE_MODE_DOTNET: const propertyGroup = subpackage?.Project?.PropertyGroup; const name = Array.isArray(propertyGroup) ? propertyGroup[0]?.Product[0] : null; if (name == null) { return subpackageLocation; } return name; case modes_1.PACKAGE_MODE_NODE: return subpackage.name; case modes_1.PACKAGE_MODE_PYTHON: return subpackageLocation; default: break; } } async function getSubpackage(mode, subpackageLocation) { switch (mode) { case modes_1.PACKAGE_MODE_DOTNET: return getSubpackageDotnet(subpackageLocation); case modes_1.PACKAGE_MODE_NODE: return getSubpackageNode(subpackageLocation); case modes_1.PACKAGE_MODE_PYTHON: return null; default: throw new Error(`Unknown value for \`mode\`: ${mode}`); } } function getSubpackageNode(subpackageLocation) { const rawdata = fs.readFileSync(`${subpackageLocation}package.json`).toString(); const packageJson = JSON.parse(rawdata); return packageJson; } async function getSubpackageDotnet(subpackageLocation) { const cwd = process.cwd(); process.chdir(subpackageLocation); const filename = (0, dotnet_1.getCsprojPath)(); const json = await (0, dotnet_1.getCsprojAsObject)(filename); process.chdir(cwd); if (json == null) { throw new Error(`Could not convert csproj to JSON: ${filename}`); } return json; } function getSubpackageFilename(mode, subpackageLocation) { switch (mode) { case modes_1.PACKAGE_MODE_DOTNET: const cwd = process.cwd(); process.chdir(subpackageLocation); const filename = (0, dotnet_1.getCsprojPath)(); process.chdir(cwd); return filename; case modes_1.PACKAGE_MODE_NODE: return 'package.json'; case modes_1.PACKAGE_MODE_PYTHON: return 'setup.py'; default: break; } } function getSubpackageLocationFromArgs(args) { for (const arg of args) { console.log(arg); console.log((0, fs_1.existsSync)(arg)); if ((0, fs_1.existsSync)(arg)) { return arg; } } return undefined; } function abortIfSubpackageLocationIsMissing(subpackageLocation) { if (subpackageLocation == null) { console.error(chalk.red(`${BADGE}Can not proceed since the subpackage location is missing.`)); process.exit(1); } } function abortIfDryRun(nextVersion, isDryRun, isForced) { if (isDryRun) { console.log(chalk.yellow(`${BADGE}I would write version ${nextVersion} to package.json.`)); console.log(chalk.yellow(`${BADGE}Aborting due to --dry.`)); if (isForced) { console.error(chalk.yellow(`${BADGE}Even though --force was provided, --dry takes precedence.`)); } process.exit(1); } } async function printInfo(mode, nextVersion, isDryRun, isForced) { const packageVersion = await (0, package_version_1.getPackageVersion)(mode); const packageVersionTag = (0, git_helpers_1.getVersionTag)(packageVersion); const branchName = (0, git_1.getGitBranch)(); const gitTagList = (0, git_1.getGitTagList)(); 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(`${BADGE}gitTagList:`); (0, printMultiLineString_1.printMultiLineString)(gitTagList); console.log(`${BADGE}tagsForHEAD:`); (0, printMultiLineString_1.printMultiLineString)((0, git_1.getGitTagsFromCommit)('HEAD')); console.log(`${BADGE}nextVersionTag:`, (0, git_helpers_1.getVersionTag)(nextVersion)); console.log(''); } //# sourceMappingURL=copy-and-commit-version-for-subpackage.js.map