projex
Version:
A command line to manage the workflow
190 lines (189 loc) • 8.33 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.VersionFileUtils = void 0;
const _api_1 = require("../../api/index");
const _shared_1 = require("../index");
const fs_extra_1 = require("fs-extra");
const semver_1 = require("semver");
const path_1 = require("path");
const fs = require('fs');
const chalk_1 = __importDefault(require("chalk"));
class VersionFileUtils {
root;
manifestVersionFile;
packageVersionFile;
manifestFile = '';
packageFile = '';
manifestContent = null;
packageJsonContent = null;
versionFile = '';
versionContent = null;
changelogPath;
constructor() {
this.root = (0, _api_1.getAppRoot)();
this.manifestVersionFile = (0, path_1.resolve)(this.root, 'manifest.json');
this.packageVersionFile = (0, path_1.resolve)(this.root, 'package.json');
this.changelogPath = (0, path_1.resolve)(this.root, 'CHANGELOG.md');
this.readVersionFile();
}
checkDirectory = (repository) => {
try {
return fs.existsSync(repository);
}
catch (error) {
return false;
}
};
readVersionFile = () => {
if (this.checkDirectory(this.manifestVersionFile)) {
this.manifestFile = this.manifestVersionFile;
this.manifestContent = (0, fs_extra_1.readJsonSync)(this.manifestVersionFile);
}
if (this.checkDirectory(this.packageVersionFile)) {
this.packageFile = this.packageVersionFile;
this.packageJsonContent = (0, fs_extra_1.readJsonSync)(this.packageVersionFile);
}
if (!this.manifestContent && !this.packageJsonContent) {
_shared_1.log.error(`${_api_1.Colors.ERROR('version file not found:')} ${this.manifestVersionFile} or ${this.packageVersionFile}.`);
process.exit(1);
}
this.versionFile = this.manifestFile || this.packageFile;
this.versionContent = this.manifestContent || this.packageJsonContent;
};
getReleaseFilesFromConfig = () => {
const contentPackageJson = this.packageJsonContent;
const contentManifest = this.manifestContent;
let releaseFiles = [];
if (contentPackageJson && contentPackageJson.projex && contentPackageJson.projex.releaseFiles) {
releaseFiles = contentPackageJson.projex.releaseFiles;
}
else if (contentManifest && contentManifest.projex && contentManifest.projex.releaseFiles) {
releaseFiles = contentManifest.projex.releaseFiles;
}
return releaseFiles;
};
updateReleaseFilesVersion = (newVersion) => {
const releaseFiles = this.getReleaseFilesFromConfig();
releaseFiles.forEach((file) => {
const resolveFile = (0, path_1.resolve)(this.root, file);
const content = (0, fs_extra_1.readJsonSync)(resolveFile);
const oldVersion = content.version;
content.version = newVersion;
(0, fs_extra_1.writeJsonSync)(file, content, { spaces: 2 });
_shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(file)}`);
});
};
addReleaseFiles = () => {
const releaseFiles = this.getReleaseFilesFromConfig();
let gitAddCommand = 'git add ';
let successMessage = 'files added:';
releaseFiles.forEach((file) => {
const resolveFile = (0, path_1.resolve)(this.root, file);
gitAddCommand += ` "${resolveFile}"`;
successMessage += ` ${resolveFile}`;
});
return (0, _shared_1.runCommand)(gitAddCommand, this.root, successMessage, true);
};
writeVersionFile = (newVersion) => {
const contentPackageJson = this.packageJsonContent;
const contentManifest = this.manifestContent;
if (contentPackageJson) {
const oldVersion = contentPackageJson.version;
contentPackageJson.version = newVersion;
(0, fs_extra_1.writeJsonSync)(this.packageFile, contentPackageJson, { spaces: 2 });
_shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(this.packageFile)}`);
}
if (contentManifest) {
const oldVersion = contentManifest.version;
contentManifest.version = newVersion;
(0, fs_extra_1.writeJsonSync)(this.manifestFile, contentManifest, { spaces: 2 });
_shared_1.log.info(`bumped version ${chalk_1.default.bold.yellow(oldVersion)} -> ${chalk_1.default.bold.green(newVersion)} in ${chalk_1.default.bold.blue(this.manifestFile)}`);
}
};
readVersion = () => {
const version = (0, semver_1.valid)(this.versionContent?.version, true);
if (!version) {
_shared_1.log.error(_api_1.Colors.ERROR(`invalid app version: ${version}`));
process.exit(1);
}
return version;
};
incrementVersion = (rawOldVersion, releaseType, tagName) => {
const oldVersion = (0, semver_1.valid)(rawOldVersion, true);
if (tagName !== 'stable' && releaseType !== 'prerelease') {
return (0, semver_1.inc)(String(oldVersion), `pre${releaseType}`, false, tagName);
}
return (0, semver_1.inc)(String(oldVersion), releaseType);
};
bump = (newVersion) => {
this.writeVersionFile(newVersion);
};
add = () => {
let gitAddCommand = 'git add ';
let successMessage = 'files added:';
if ((0, fs_extra_1.existsSync)(this.manifestFile)) {
gitAddCommand += ` "${this.manifestFile}"`;
successMessage += ` ${this.manifestFile}`;
}
if ((0, fs_extra_1.existsSync)(this.packageFile)) {
gitAddCommand += ` "${this.packageFile}"`;
successMessage += ` ${this.packageFile}`;
}
if ((0, fs_extra_1.existsSync)(this.changelogPath)) {
gitAddCommand += ` "${this.changelogPath}"`;
successMessage = ` ${this.changelogPath}`;
}
return (0, _shared_1.runCommand)(gitAddCommand, this.root, successMessage, true);
};
getVersionFileToUse = () => {
return this.manifestContent || this.packageJsonContent;
};
readAppName = () => {
const vendor = this.versionContent?.vendor;
const name = this.versionContent?.name;
return `${vendor ? `${vendor}.` : ''}${name}`;
};
getScript = (key) => {
const versionFile = this.getVersionFileToUse();
if (!versionFile) {
_shared_1.log.error('no version file found');
process.exit(1);
}
return versionFile.scripts && versionFile.scripts[key];
};
findScript = (key) => {
if (this.manifestContent || this.packageJsonContent) {
const scriptInManifestFile = this.manifestContent?.scripts && this.manifestContent?.scripts[key];
const scriptInPackageFile = this.packageJsonContent?.scripts && this.packageJsonContent?.scripts[key];
if (scriptInManifestFile) {
return scriptInManifestFile;
}
else if (scriptInPackageFile) {
return scriptInPackageFile;
}
else {
_shared_1.log.warn(`no script found for ${key}`);
}
}
};
runFindScript = (key, msg) => {
const cmd = this.findScript(key);
return cmd ? (0, _shared_1.runCommand)(cmd, this.root, msg, false) : _shared_1.log.verbose(`no script found for ${key}`);
};
runScript = (key, msg) => {
const cmd = this.getScript(key);
return cmd ? (0, _shared_1.runCommand)(cmd, this.root, msg, false) : _shared_1.log.verbose(`no script found for ${key}`);
};
getVersionInformation = (oldVersion, newVersion, pushCommandText) => {
return {
oldVersion,
newVersion,
pushCommandText,
appName: this.readAppName(),
};
};
}
exports.VersionFileUtils = VersionFileUtils;