From 7a826c6cb6ac5464f12795bca9e0bba37b11bf16 Mon Sep 17 00:00:00 2001 From: Obvious Date: Wed, 14 Oct 2026 15:14:12 +0000 Subject: [PATCH] fix(cli): align the Vite upgrade blocker with the 6.3.0 floor The upgrade blocker gated Vite at 5.0.0 while MIGRATION.md and the Vite-based frameworks' peer range (^6.3.0 || ^7.0.0 || ^8.0.0) state 6.3.0 as the supported floor. A project on Vite 5.4 or 6.0 could upgrade through the blocker and land on an unsupported Vite, and a genuinely incompatible Vite got a generic message with no migration link. Raise the threshold to 6.3.0 and add a Vite-specific title, message, and migration-guide link, matching the react and angular blockers. Regression tests pin the boundary (blocks 4.5.2/5.4.21/6.2.2 and 6.3.0-beta.0, accepts 6.3.0/6.4.4/7.1.2) and the corrected message. --- .../block-dependencies-versions.test.ts | 44 +++++++++++++++++++ .../autoblock/block-dependencies-versions.ts | 11 ++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.test.ts b/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.test.ts index 30d312e4323e..9cc243ffb61d 100644 --- a/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.test.ts +++ b/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.test.ts @@ -107,6 +107,50 @@ describe('dependenciesVersions blocker', () => { expect(result).toBe(false); }); + test.each(['4.5.2', '5.4.21', '6.2.2'])('blocks Vite %s before upgrading', async (version) => { + const packageManager = createPackageManager({ vite: version }); + + const result = await blocker.check(createCheckOptions(packageManager)); + + expect(result).toEqual({ + packageName: 'vite', + installedVersion: version, + minimumVersion: '6.3.0', + }); + + if (!result) { + throw new Error(`Expected Vite ${version} to be blocked`); + } + + const logged = blocker.log(result); + + expect(logged.title).toBe('Vite 6.3 or newer required'); + expect(logged.message).toContain('Support for Vite < 6.3.0 has been removed.'); + expect(logged.link).toBe( + 'https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-requires-vite-63-or-higher' + ); + }); + + test('blocks Vite prereleases of the floor version', async () => { + const result = await blocker.check( + createCheckOptions(createPackageManager({ vite: '6.3.0-beta.0' })) + ); + + expect(result).toEqual({ + packageName: 'vite', + installedVersion: '6.3.0-beta.0', + minimumVersion: '6.3.0', + }); + }); + + test.each(['6.3.0', '6.4.4', '7.1.2'])('accepts Vite %s', async (version) => { + const packageManager = createPackageManager({ vite: version }); + + const result = await blocker.check(createCheckOptions(packageManager)); + + expect(result).toBe(false); + }); + test('@angular/core 20 is blocked with message and migration anchor', async () => { const packageManager = createPackageManager({ '@angular/core': '20.0.0' }); diff --git a/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.ts b/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.ts index ee890a8a139f..7254ee5cd316 100644 --- a/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.ts +++ b/code/lib/cli-storybook/src/autoblock/block-dependencies-versions.ts @@ -12,7 +12,7 @@ const minimalVersionsMap = { 'react-dom': '18.0.0', svelte: '5.0.0', vue: '3.0.0', - vite: '5.0.0', + vite: '6.3.0', } as const; const conditionalVersionsMap = { @@ -115,6 +115,15 @@ export const blocker = createBlocker({ `, link: 'https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-require-v18-and-up', }; + case 'vite': + return { + title: 'Vite 6.3 or newer required', + message: dedent` + Support for Vite < 6.3.0 has been removed. + Please see the migration guide for more information: + `, + link: 'https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-requires-vite-63-or-higher', + }; default: return { title: `${data.packageName} version < ${data.minimumVersion} support removed`,