UNPKG

@jwpkg/gitversion

Version:

Gitversion is a complete customizable git-based release management system

163 lines 17.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PublishCommand = void 0; const clipanion_1 = require("clipanion"); const colorize_node_1 = require("colorize-node"); const path_1 = require("path"); const application_1 = require("../core/application"); const configuration_1 = require("../core/configuration"); const format_utils_1 = require("../core/format-utils"); const pack_artifact_1 = require("../core/pack-artifact"); const context_1 = require("./context"); class PublishCommand extends context_1.GitVersionCommand { static paths = [ ['publish'], ]; push = clipanion_1.Option.Boolean('--push', true, { description: 'Push the changes to the remote repository' }); tag = clipanion_1.Option.Boolean('--tag', true, { description: 'Tag the commit with the version' }); dryRun = clipanion_1.Option.Boolean('--dry-run', false); async execute() { const application = await application_1.Application.init(this.context.application, { dryRun: this.dryRun, }); const context = { ...this.context, application, }; const { project, git, configuration, branch, hooks, packManagers, logger } = application; if (!project) { return 1; } let packManifest = await pack_artifact_1.PackArtifact.load(configuration, git); if (!packManifest) { logger.reportInfo('No pack manifest found. Running pack on current workspace'); const result = await this.cli.run(['pack'], context); if (result !== 0) { return result; } packManifest = await pack_artifact_1.PackArtifact.load(configuration, git); } else { logger.reportInfo('Pack manifest found. Publishing from pack'); } if (packManifest === null) { logger.reportError('Still invalid pack manifest. Breaking off'); return 1; } if (!(await packManifest.validateGitStatusForPublish())) { logger.reportWarning('Git status has changed since pack. Please make sure you have a valid flow', true); console.log('Git status output:'); console.log(await git.exec('status', '--porcelain')); } const packedPackages = packManifest.packages; if (packedPackages.length > 0) { await this.publishPackages(packManagers, packedPackages, configuration, branch, logger); const bumpedPackages = packedPackages.filter(p => !p.republish); if (bumpedPackages.length > 0) { if (this.tag) { await this.addTags(bumpedPackages, git, logger); } else { logger.reportInfo('Skipping tagging step'); } if (this.push) { await git.push(); } else { logger.reportInfo('Skipping push step'); } await this.updateChangelogs(bumpedPackages, project, git, logger); const isDefaultChangelogBranch = application.branch.type !== configuration_1.BranchType.FEATURE; const shouldPushChangelogs = this.push && (isDefaultChangelogBranch || configuration.options.featurePushChangelogs); if (shouldPushChangelogs) { await git.push(); } else { logger.reportInfo('Skipping push step'); } } else { logger.reportInfo('Republish mode: skipping tagging, changelog update, and push steps'); } await hooks.dispatchOnPublish(application, packedPackages); } else { logger.reportWarning('Nothing to publish'); } return 0; } async publishPackages(packManagers, packedPackages, configuration, branch, logger) { const publish = logger.beginSection('Publish step'); const promises = packedPackages.map(async (packedPackage) => { if (packedPackage.packFiles) { await this.publishPackage(packManagers, packedPackage, configuration, branch, logger); } }); await Promise.all(promises); logger.endSection(publish); } async publishPackage(packManagers, packedPackage, configuration, branch, logger) { return logger.runSection(`Publishing ${(0, format_utils_1.formatPackageName)(packedPackage.packageName)}`, async () => { const releaseTag = branch.type === configuration_1.BranchType.MAIN ? 'latest' : branch.name; const publishCommands = packManagers.map(async (packManager) => { if (packedPackage.packFiles?.[packManager.ident]) { try { const packFiles = packedPackage.packFiles[packManager.ident]; if (Array.isArray(packFiles)) { for (const file of packFiles) { await packManager.publish(packedPackage, (0, path_1.join)(configuration.packFolder, packManager.ident, file), releaseTag, this.dryRun); } } else if (typeof packFiles === 'string') { await packManager.publish(packedPackage, (0, path_1.join)(configuration.packFolder, packManager.ident, packFiles), releaseTag, this.dryRun); } else if (typeof packFiles === 'object' && packFiles !== null) { // If packFiles is an object, we assume it's a record of files for (const [key, file] of Object.entries(packFiles)) { await packManager.publish(packedPackage, (0, path_1.join)(configuration.packFolder, packManager.ident, file), releaseTag, this.dryRun, key); } } } catch (error) { logger.reportError(`Error publishing ${(0, format_utils_1.formatPackageName)(packedPackage.packageName)}@${(0, format_utils_1.formatVersion)(packedPackage.version)} with plugin ${colorize_node_1.colorize.yellowBright('name' in packManager && typeof packManager.name === 'string' ? packManager.name : packManager.ident)}`, true); throw error; } } }); await Promise.all(publishCommands); }); } async addTags(packages, git, logger) { const section = logger.beginSection('Tagging step'); const allTags = packages.map(p => p.tag); const tags = allTags.filter((tag, pos) => { return allTags.indexOf(tag) == pos; }); const commands = tags.map(async (tag) => { await git.addTag(tag, 'Tag added by gitversion'); }); await Promise.all(commands); logger.endSection(section); } async updateChangelogs(packages, project, git, logger) { const section = logger.beginSection('Updating changelogs'); const files = []; const commands = packages.map(async (p) => { const workspace = project.workspaces.find(w => w.relativeCwd === p.packageRelativeCwd); if (workspace) { const file = await workspace.updateChangelog(p.changeLog); if (!files.includes(file)) { logger.reportInfo(`Updating: ${colorize_node_1.colorize.yellow(colorize_node_1.colorize.underline((0, path_1.join)(workspace.cwd, 'CHANGELOG.md')))}`); files.push(file); } } }); await Promise.all(commands); if (files.length > 0) { await git.addAndCommitFiles('Updated changelogs', files); } logger.endSection(section); } } exports.PublishCommand = PublishCommand; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9wdWJsaXNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyxpREFBeUM7QUFDekMsK0JBQTRCO0FBRTVCLHFEQUFrRDtBQUNsRCx5REFBa0Y7QUFDbEYsdURBQXdFO0FBR3hFLHlEQUFvRTtBQUlwRSx1Q0FBOEM7QUFFOUMsTUFBYSxjQUFlLFNBQVEsMkJBQWlCO0lBQ25ELE1BQU0sQ0FBQyxLQUFLLEdBQUc7UUFDYixDQUFDLFNBQVMsQ0FBQztLQUNaLENBQUM7SUFFRixJQUFJLEdBQUcsa0JBQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSwyQ0FBMkMsRUFBRSxDQUFDLENBQUM7SUFDcEcsR0FBRyxHQUFHLGtCQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sR0FBRyxrQkFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFNUMsS0FBSyxDQUFDLE9BQU87UUFDWCxNQUFNLFdBQVcsR0FBRyxNQUFNLHlCQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQ25FLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLE9BQU8sR0FBRztZQUNkLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDZixXQUFXO1NBQ1osQ0FBQztRQUVGLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7UUFFekYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2Is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