From ba6c626d09e3d439f5b6e788d00a2ea57328582e Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Tue, 25 Jan 2022 16:20:35 +0100 Subject: [PATCH] combine bump arguments Signed-off-by: Johan Haals --- packages/cli/src/commands/index.ts | 9 ++-- packages/cli/src/commands/versions/bump.ts | 49 ++++++++++++++-------- 2 files changed, 34 insertions(+), 24 deletions(-) diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index b1fce377f5..770d216ba2 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -342,12 +342,9 @@ export function registerCommands(program: CommanderStatic) { 'Override glob for matching packages to upgrade', ) .option( - '--release-line ', - 'Bump to the latest version of a specific release line', - ) - .option( - '--backstage-release ', - 'Bump to a specific Backstage release', + '--release ', + 'Bump to a specific Backstage release line or version', + 'main', ) .description('Bump Backstage packages to the latest versions') .action(lazy(() => import('./versions/bump').then(m => m.default))); diff --git a/packages/cli/src/commands/versions/bump.ts b/packages/cli/src/commands/versions/bump.ts index 31e424dd6d..a7ce942af7 100644 --- a/packages/cli/src/commands/versions/bump.ts +++ b/packages/cli/src/commands/versions/bump.ts @@ -19,7 +19,7 @@ import chalk from 'chalk'; import semver from 'semver'; import minimatch from 'minimatch'; import { Command } from 'commander'; -import { isError } from '@backstage/errors'; +import { isError, NotFoundError } from '@backstage/errors'; import { resolve as resolvePath } from 'path'; import { run } from '../../lib/run'; import { paths } from '../../lib/paths'; @@ -66,23 +66,20 @@ export default async (cmd: Command) => { console.log(`Using custom pattern glob ${pattern}`); } - if (cmd.releaseLine && cmd.backstageRelease) { - throw new Error( - 'Cannot specify both --release-line and --backstage-release', - ); + let findTargetVersion: (name: string) => Promise; + if (semver.valid(cmd.release)) { + findTargetVersion = createStrictVersionFinder({ + releaseManifest: await getByVersion({ version: cmd.release }), + }); + } else { + findTargetVersion = createVersionFinder({ + releaseLine: cmd.releaseLine, + releaseManifest: await getByReleaseLine({ + releaseLine: cmd.release, + }), + }); } - let releaseManifest; - if (cmd.backstageRelease) { - releaseManifest = await getByVersion({ version: cmd.backstageRelease }); - } else if (cmd.releaseLine) { - releaseManifest = await getByReleaseLine({ releaseLine: cmd.releaseLine }); - } - const findTargetVersion = createVersionFinder({ - releaseLine: cmd.releaseLine, - releaseManifest, - }); - // First we discover all Backstage dependencies within our own repo const dependencyMap = await mapDependencies(paths.targetDir, pattern); @@ -305,10 +302,26 @@ export default async (cmd: Command) => { } }; +export function createStrictVersionFinder(options: { + releaseManifest: ReleaseManifest; +}) { + const releasePackages = new Map( + options.releaseManifest.packages.map(p => [p.name, p.version]), + ); + return async function findTargetVersion(name: string) { + console.log(`Checking for updates of ${name}`); + const manifestVersion = releasePackages.get(name); + if (manifestVersion) { + return manifestVersion; + } + throw new NotFoundError(`Package ${name} not found in release manifest`); + }; +} + export function createVersionFinder(options: { releaseLine?: string; packageInfoFetcher?: () => Promise; - releaseManifest?: ReleaseManifest; + releaseManifest: ReleaseManifest; }) { const { releaseLine = 'latest', @@ -319,7 +332,7 @@ export function createVersionFinder(options: { const distTag = releaseLine === 'main' ? 'latest' : releaseLine; const found = new Map(); const releasePackages = new Map( - releaseManifest?.packages.map(p => [p.name, p.version]), + releaseManifest.packages.map(p => [p.name, p.version]), ); return async function findTargetVersion(name: string) { const existing = found.get(name);