@process-engine/ci_tools
Version:
CI tools for process-engine.io
183 lines (181 loc) • 7.76 kB
JavaScript
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
;