Skip to content

Commit

Permalink
Merge pull request #27217 from storybookjs/kasper/disable-upgrade-to-…
Browse files Browse the repository at this point in the history
…same-version-error

CLI: Only log the UpgradeStorybookToSameVersionError but continue the upgrade as normal
(cherry picked from commit 68809b6)
  • Loading branch information
kasperpeulen authored and storybook-bot committed Jun 5, 2024
1 parent 6b9e67b commit 6eeaf12
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 9 deletions.
22 changes: 15 additions & 7 deletions code/lib/cli/src/upgrade.test.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import { describe, it, expect, vi } from 'vitest';
import { describe, expect, it, vi } from 'vitest';
import * as sbcc from '@storybook/core-common';
import {
UpgradeStorybookToLowerVersionError,
UpgradeStorybookToSameVersionError,
} from '@storybook/core-events/server-errors';
import { UpgradeStorybookToLowerVersionError } from '@storybook/core-events/server-errors';
import { doUpgrade, getStorybookVersion } from './upgrade';
import { logger } from '@storybook/node-logger';

const findInstallationsMock = vi.fn<string[], Promise<sbcc.InstallationMetadata | undefined>>();

Expand All @@ -16,6 +14,8 @@ vi.mock('@storybook/core-common', async (importOriginal) => {
JsPackageManagerFactory: {
getPackageManager: () => ({
findInstallations: findInstallationsMock,
latestVersion: async () => '8.0.0',
retrievePackageJson: async () => {},
getAllDependencies: async () => ({ storybook: '8.0.0' }),
}),
},
Expand Down Expand Up @@ -68,7 +68,7 @@ describe('Upgrade errors', () => {
await expect(doUpgrade({} as any)).rejects.toThrowError(UpgradeStorybookToLowerVersionError);
expect(findInstallationsMock).toHaveBeenCalledWith(Object.keys(sbcc.versions));
});
it('should throw an error when upgrading to the same version number', async () => {
it('should show a warning when upgrading to the same version number', async () => {
findInstallationsMock.mockResolvedValue({
dependencies: {
'@storybook/cli': [
Expand All @@ -82,7 +82,15 @@ describe('Upgrade errors', () => {
dedupeCommand: '',
});

await expect(doUpgrade({} as any)).rejects.toThrowError(UpgradeStorybookToSameVersionError);
// Mock as a throw, so that we don't have to mock the content of the doUpgrade fn that comes after it
vi.spyOn(logger, 'warn').mockImplementation((error) => {
// eslint-disable-next-line @typescript-eslint/no-throw-literal
throw error;
});

await expect(doUpgrade({ packageManager: 'npm' } as any)).rejects.toContain(
'You are upgrading Storybook to the same version that is currently installed in the project'
);
expect(findInstallationsMock).toHaveBeenCalledWith(Object.keys(sbcc.versions));
});
});
4 changes: 3 additions & 1 deletion code/lib/cli/src/upgrade.ts
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,10 @@ export const doUpgrade = async ({
if (!isCanary && lt(currentVersion, beforeVersion)) {
throw new UpgradeStorybookToLowerVersionError({ beforeVersion, currentVersion });
}

if (!isCanary && eq(currentVersion, beforeVersion)) {
throw new UpgradeStorybookToSameVersionError({ beforeVersion });
// Not throwing, as the beforeVersion calculation doesn't always work in monorepos.
logger.warn(new UpgradeStorybookToSameVersionError({ beforeVersion }).message);
}

const [latestVersion, packageJson, storybookVersion] = await Promise.all([
Expand Down
2 changes: 1 addition & 1 deletion code/lib/core-events/src/errors/server-errors.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,7 +545,7 @@ export class UpgradeStorybookToSameVersionError extends StorybookError {

template() {
return dedent`
You are trying to upgrade Storybook to the same version that is currently installed in the project, version ${this.data.beforeVersion}. This is not supported.
You are upgrading Storybook to the same version that is currently installed in the project, version ${this.data.beforeVersion}.
This usually happens when running the upgrade command without a version specifier, e.g. "npx storybook upgrade".
This will cause npm to run the globally cached storybook binary, which might be the same version that you already have.
Expand Down

0 comments on commit 6eeaf12

Please sign in to comment.