@jwpkg/gitversion
Version:
Gitversion is a complete customizable git-based release management system
135 lines • 11.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Application = void 0;
const promises_1 = require("fs/promises");
const path_1 = require("path");
const plugins_1 = require("../plugins");
const configuration_1 = require("./configuration");
const constants_1 = require("./constants");
const error_utils_1 = require("./error-utils");
const executor_1 = require("./executor");
const git_1 = require("./git");
const log_reporter_1 = require("./log-reporter");
class Application {
static detectVersionBranch(configOptions, branchName) {
const mainBranchPatterns = configOptions.mainBranchPatterns.map(pattern => new RegExp(pattern));
for (const branchPattern of mainBranchPatterns) {
if (branchPattern.test(branchName)) {
return {
type: configuration_1.BranchType.MAIN,
name: branchName,
};
}
}
const featureBranchPatterns = configOptions.featureBranchPatterns.map(pattern => new RegExp(pattern));
for (const branchPattern of featureBranchPatterns) {
if (branchPattern.test(branchName)) {
const matches = branchPattern.exec(branchName);
if (matches && matches.length === 2) {
return {
name: matches[1],
type: configuration_1.BranchType.FEATURE,
};
}
else {
throw new Error(`The feature pattern '${branchPattern.source}' matched the current branch but it should result in exact 1 group match`);
}
}
}
const releaseBranchPatterns = configOptions.releaseBranchPatterns.map(pattern => new RegExp(pattern));
for (const branchPattern of releaseBranchPatterns) {
if (branchPattern.test(branchName)) {
const matches = branchPattern.exec(branchName);
if (matches && matches.length === 2) {
return {
name: matches[1],
type: configuration_1.BranchType.RELEASE,
};
}
else {
throw new Error(`The release pattern '${branchPattern.source}' matched the current branch but it should result in exact 1 group match`);
}
}
}
return {
name: 'unknown',
type: configuration_1.BranchType.UNKNOWN,
};
}
static async init(application, cliOptions) {
if (application) {
if (cliOptions && (0, configuration_1.isUpdateableConfiguration)(application.configuration)) {
application.configuration.updateOptions(cliOptions);
}
return application;
}
const logger = new log_reporter_1.LogReporter();
const version = JSON.parse(await (0, promises_1.readFile)((0, path_1.resolve)(__dirname, '../../package.json'), 'utf-8')).version;
logger.reportHeader(`Gitversion ${version}`);
const cwd = await git_1.Git.root();
const executor = new executor_1.Executor(cwd, logger);
const options = {
...constants_1.DEFAULT_CONFIGURATION_OPTIONS,
...(await configuration_1.Configuration.loadCustomConfig(cwd, logger)),
...cliOptions,
};
const configuration = new configuration_1.Configuration(cwd, options);
const git = new git_1.Git(cwd, configuration.options.dryRun, logger, executor);
if (configuration.options.gitFlags) {
Object.entries(configuration.options.gitFlags).forEach(([key, value]) => {
git.addConfiguration(key, value);
});
}
const pluginManager = new plugins_1.PluginManager();
if (options.plugins) {
for (const plugin of options.plugins) {
pluginManager.register(plugin);
}
}
await pluginManager.initialize({
cwd,
git,
executor,
options,
logger,
packFolder: configuration.packFolder,
stagingFolder: configuration.stagingFolder,
});
// We should have a project type after initialize
if (!pluginManager.project) {
throw new Error('Can\'t load project');
}
if (pluginManager.packManagers.length == 0) {
throw new Error('No pack managers found for current project');
}
const branchName = await pluginManager.gitPlatform.currentBranch();
if (!branchName) {
const section = logger.beginSection('Debug info');
(0, error_utils_1.debugEnvironment)(logger);
await (0, error_utils_1.debugGitCommands)(logger);
logger.reportInfo('Active plugins:');
for (const plugin of pluginManager.availablePlugins) {
logger.reportInfo(`- ${plugin.name}`);
}
logger.reportInfo(`Current branch reference: ${await pluginManager.gitPlatform.currentRef()}`);
logger.endSection(section);
throw new error_utils_1.UnexpectedError('Can\'t determine current gitbranch. Breaking off');
}
const branch = this.detectVersionBranch(options, branchName);
return {
cwd,
configuration,
pluginManager,
branch,
executor,
logger,
project: pluginManager.project,
gitPlatform: pluginManager.gitPlatform,
hooks: pluginManager,
packManagers: pluginManager.packManagers,
git,
};
}
}
exports.Application = Application;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwbGljYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29yZS9hcHBsaWNhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwwQ0FBdUM7QUFDdkMsK0JBQStCO0FBRS9CLHdDQUFnRztBQUVoRyxtREFBNks7QUFDN0ssMkNBQTREO0FBQzVELCtDQUFvRjtBQUNwRix5Q0FBaUQ7QUFDakQsK0JBQTRCO0FBQzVCLGlEQUE2QztBQW1CN0MsTUFBYSxXQUFXO0lBQ3RCLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUEwQyxFQUFFLFVBQWtCO1FBQ3ZGLE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFFaEcsS0FBSyxNQUFNLGFBQWEsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1lBQy9DLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2dCQUNuQyxPQUFPO29CQUNMLElBQUksRUFBRSwwQkFBVSxDQUFDLElBQUk7b0JBQ3JCLElBQUksRUFBRSxVQUFVO2lCQUNqQixDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLHFCQUFxQixHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3RHLEtBQUssTUFBTSxhQUFhLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUNsRCxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsTUFBTSxPQUFPLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFFL0MsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0s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