From 71973cd4d36c1ed9cb822ed6df8143cdd9618a80 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Feb 2022 21:36:15 +0100 Subject: [PATCH] cli: improve package script migration to keep more args and not replace custom scripts Signed-off-by: Patrik Oldsberg --- .../src/commands/migrate/packageScripts.ts | 37 ++++++++++++++++--- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/commands/migrate/packageScripts.ts b/packages/cli/src/commands/migrate/packageScripts.ts index 8e722a4bd0..c616fbba69 100644 --- a/packages/cli/src/commands/migrate/packageScripts.ts +++ b/packages/cli/src/commands/migrate/packageScripts.ts @@ -19,6 +19,8 @@ import { resolve as resolvePath } from 'path'; import { PackageGraph } from '../../lib/monorepo'; import { getRoleFromPackage, getRoleInfo, PackageRole } from '../../lib/role'; +const configArgPattern = /--config[=\s][^\s$]+/; + const noStartRoles: PackageRole[] = ['cli', 'common-library']; export async function command() { @@ -34,19 +36,39 @@ export async function command() { const roleInfo = getRoleInfo(role); const hasStart = !noStartRoles.includes(role); const needsPack = !(roleInfo.output.includes('bundle') || role === 'cli'); + const scripts = packageJson.scripts ?? {}; const startCmd = ['start']; - if (packageJson.scripts?.start?.includes('--check')) { + if (scripts.start?.includes('--check')) { startCmd.push('--check'); } + if (scripts.start?.includes('--config')) { + startCmd.push(...(scripts.start.match(configArgPattern) ?? [])); + } const buildCmd = ['build']; - if (packageJson.scripts?.build?.includes('--minify')) { + if (scripts.build?.includes('--minify')) { buildCmd.push('--minify'); } - if (packageJson.scripts?.build?.includes('--experimental-type-build')) { + if (scripts.build?.includes('--experimental-type-build')) { buildCmd.push('--experimental-type-build'); } + if (scripts.build?.includes('--config')) { + buildCmd.push(...(scripts.build.match(configArgPattern) ?? [])); + } + + // For test scripts we keep all existing flags except for --passWithNoTests, since that's now default + const testCmd = ['test']; + if (scripts.test?.startsWith('backstage-cli test')) { + const args = scripts.test + .slice('backstage-cli test'.length) + .split(' ') + .filter(Boolean); + if (args.includes('--passWithNoTests')) { + args.splice(args.indexOf('--passWithNoTests'), 1); + } + testCmd.push(...args); + } const expectedScripts = { ...(hasStart && { @@ -54,7 +76,7 @@ export async function command() { }), build: `backstage-cli script ${buildCmd.join(' ')}`, lint: 'backstage-cli script lint', - test: 'backstage-cli script test', + test: `backstage-cli script ${testCmd.join(' ')}`, clean: 'backstage-cli script clean', ...(needsPack && { postpack: 'backstage-cli script postpack', @@ -67,7 +89,12 @@ export async function command() { (packageJson.scripts = packageJson.scripts || {}); for (const [name, value] of Object.entries(expectedScripts)) { - if (currentScripts[name] !== value) { + const currentScript = currentScripts[name]; + + const isMissing = !currentScript; + const isDifferent = currentScript !== value; + const isBackstageScript = currentScript?.includes('backstage-cli'); + if (isMissing || (isDifferent && isBackstageScript)) { changed = true; currentScripts[name] = value; }