From 5bc63f881b65e9ac77774d8e3661da2e2dd6715a Mon Sep 17 00:00:00 2001 From: Tom Coleman Date: Sat, 3 Dec 2022 11:59:56 +1100 Subject: [PATCH] Add `--tag` option to `upgrade` script --- code/lib/cli/src/generate.ts | 1 + code/lib/cli/src/upgrade.ts | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/code/lib/cli/src/generate.ts b/code/lib/cli/src/generate.ts index 6413dcf850e..63b6d232d50 100644 --- a/code/lib/cli/src/generate.ts +++ b/code/lib/cli/src/generate.ts @@ -81,6 +81,7 @@ program .option('-N --use-npm', 'Use NPM to install dependencies (deprecated)') .option('-y --yes', 'Skip prompting the user') .option('-n --dry-run', 'Only check for upgrades, do not install') + .option('-t --tag ', 'Upgrade to a certain npm dist-tag (e.g. next, prerelease)') .option('-p --prerelease', 'Upgrade to the pre-release packages') .option('-s --skip-check', 'Skip postinstall version and automigration checks') .action((options: UpgradeOptions) => upgrade(options)); diff --git a/code/lib/cli/src/upgrade.ts b/code/lib/cli/src/upgrade.ts index e21ee4946c2..e20e94a198f 100644 --- a/code/lib/cli/src/upgrade.ts +++ b/code/lib/cli/src/upgrade.ts @@ -136,6 +136,7 @@ export const addExtraFlags = ( }; export interface UpgradeOptions { + tag: string; prerelease: boolean; skipCheck: boolean; useNpm: boolean; @@ -146,6 +147,7 @@ export interface UpgradeOptions { } export const doUpgrade = async ({ + tag, prerelease, skipCheck, useNpm, @@ -161,13 +163,26 @@ export const doUpgrade = async ({ commandLog(`Checking for latest versions of '@storybook/*' packages`); if (!options.disableTelemetry) { - telemetry('upgrade', { prerelease }); + telemetry('upgrade', { prerelease, tag }); + } + + if (tag && prerelease) { + throw new Error( + `Cannot set both --tag and --prerelease. Use --tag next to get the latest prereleae` + ); + } + + let target = 'latest'; + if (prerelease) { + target = 'greatest'; + } else if (tag) { + target = `@${tag}`; } let flags = []; if (!dryRun) flags.push('--upgrade'); flags.push('--target'); - flags.push(prerelease ? 'greatest' : 'latest'); + flags.push(target); flags = addExtraFlags(EXTRA_FLAGS, flags, packageManager.retrievePackageJson()); const check = spawnSync('npx', ['npm-check-updates@latest', '/storybook/', ...flags], { stdio: 'pipe',