Merge pull request #26585 from storybookjs/yann/fix-installations-command

CLI: Throw an error when running upgrade command in incorrect cwd
(cherry picked from commit 7b9e094bc0f6645c6e955d98036ad7aa9b3acf51)
This commit is contained in:
Yann Braga 2024-03-21 09:25:06 +01:00 committed by storybook-bot
parent f55cb5705f
commit 5149d0f64e
5 changed files with 42 additions and 0 deletions

View File

@ -210,4 +210,20 @@ describe('Helpers', () => {
}).toThrowError(`Could not coerce ${invalidSemverString} into a semver.`);
});
});
describe('hasStorybookDependencies', () => {
it(`should return true when any storybook dependency exists`, async () => {
const result = await helpers.hasStorybookDependencies({
getAllDependencies: async () => ({ storybook: 'x.y.z' }),
} as unknown as JsPackageManager);
expect(result).toEqual(true);
});
it(`should return false when no storybook dependency exists`, async () => {
const result = await helpers.hasStorybookDependencies({
getAllDependencies: async () => ({ axios: 'x.y.z' }),
} as unknown as JsPackageManager);
expect(result).toEqual(false);
});
});
});

View File

@ -296,3 +296,9 @@ export function coerceSemver(version: string) {
invariant(coercedSemver != null, `Could not coerce ${version} into a semver.`);
return coercedSemver;
}
export async function hasStorybookDependencies(packageManager: JsPackageManager) {
const currentPackageDeps = await packageManager.getAllDependencies();
return Object.keys(currentPackageDeps).some((dep) => dep.includes('storybook'));
}

View File

@ -16,6 +16,7 @@ vi.mock('@storybook/core-common', async (importOriginal) => {
JsPackageManagerFactory: {
getPackageManager: () => ({
findInstallations: findInstallationsMock,
getAllDependencies: async () => ({ storybook: '8.0.0' }),
}),
},
versions: Object.keys(originalModule.versions).reduce(

View File

@ -4,6 +4,7 @@ import semver, { eq, lt, prerelease } from 'semver';
import { logger } from '@storybook/node-logger';
import { withTelemetry } from '@storybook/core-server';
import {
UpgradeStorybookInWrongWorkingDirectory,
UpgradeStorybookToLowerVersionError,
UpgradeStorybookToSameVersionError,
UpgradeStorybookUnknownCurrentVersionError,
@ -23,6 +24,7 @@ import {
} from '@storybook/core-common';
import { automigrate } from './automigrate/index';
import { autoblock } from './autoblock/index';
import { hasStorybookDependencies } from './helpers';
type Package = {
package: string;
@ -135,6 +137,9 @@ export const doUpgrade = async ({
beforeVersion.startsWith('portal:') ||
beforeVersion.startsWith('workspace:');
if (!(await hasStorybookDependencies(packageManager))) {
throw new UpgradeStorybookInWrongWorkingDirectory();
}
if (!isCanary && lt(currentVersion, beforeVersion)) {
throw new UpgradeStorybookToLowerVersionError({ beforeVersion, currentVersion });
}

View File

@ -577,6 +577,20 @@ export class UpgradeStorybookUnknownCurrentVersionError extends StorybookError {
}
}
export class UpgradeStorybookInWrongWorkingDirectory extends StorybookError {
readonly category = Category.CLI_UPGRADE;
readonly code = 6;
template() {
return dedent`
You are running the upgrade command in a CWD that does not contain Storybook dependencies.
Did you mean to run it in a different directory? Make sure the directory you run this command in contains a package.json with your Storybook dependencies.
`;
}
}
export class NoStatsForViteDevError extends StorybookError {
readonly category = Category.BUILDER_VITE;