Skip to content

Conversation

github-actions[bot]
Copy link
Contributor

@github-actions github-actions bot commented Jun 10, 2025

This is an automated pull request that bumps the version from 9.1.0-alpha.5 to 9.1.0-alpha.6.
Once this pull request is merged, it will trigger a new release of version 9.1.0-alpha.6.
If you're not a core maintainer with permissions to release you can ignore this pull request.

To do

Before merging the PR, there are a few QA steps to go through:

  • Add the "freeze" label to this PR, to ensure it doesn't get automatically forced pushed by new changes.
  • Add the "ci:daily" label to this PR, to trigger the full test suite to run on this PR.

And for each change below:

  1. Ensure the change is appropriate for the version bump. E.g. patch release should only contain patches, not new or de-stabilizing features. If a change is not appropriate, revert the PR.
  2. Ensure the PR is labeled correctly with one of: "BREAKING CHANGE", "feature request", "bug", "maintenance", "dependencies", "documentation", "build", "unknown".
  3. Ensure the PR title is correct, and follows the format "[Area]: [Summary]", e.g. "React: Fix hooks in CSF3 render functions". If it is not correct, change the title in the PR.
    • Areas include: React, Vue, Core, Docs, Controls, etc.
    • First word of summary indicates the type: “Add”, “Fix”, “Upgrade”, etc.
    • The entire title should fit on a line

This is a list of all the PRs merged and commits pushed directly to next, that will be part of this release:

  • 🐛 Bug: CLI: Fix package manager instantiation in empty directories #31743
  • 🐛 Bug: CSF: Improve docs parameter types #31736
  • 🔧 Maintenance: Core: Delete shim addon packages #31728 (will also be patched)
  • ✨ Feature Request: CLI: Improve support for upgrading Storybook in monorepos #31557
  • 📝 Documentation: Docs: Update eslint plugin configuration guide #31739 (will also be patched)

If you've made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with this workflow and wait for it to finish. It will wipe your progress in this to do, which is expected.

Feel free to manually commit any changes necessary to this branch after you've done the last re-generation, following the Make Manual Changes section in the docs, especially if you're making changes to the changelog.

When everything above is done:


Generated changelog

9.1.0-alpha.6

yannbf and others added 30 commits May 22, 2025 12:08
…support-for-js-package-manager

Core: Improve mono repo handling for JsPackageManager class and helpers
@github-actions github-actions bot requested a review from kylegach as a code owner June 10, 2025 14:57
@github-actions github-actions bot added the release For PRs that trigger new releases. Automated label Jun 10, 2025
@github-actions github-actions bot requested a review from jonniebigodes as a code owner June 10, 2025 14:57
@github-actions github-actions bot added the release For PRs that trigger new releases. Automated label Jun 10, 2025
Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

196 files reviewed, 21 comments
Edit PR Review Bot Settings | Greptile

Comment on lines +7 to +13
export const LOCK_FILES = [
NPM_LOCKFILE,
PNPM_LOCKFILE,
YARN_LOCKFILE,
BUN_LOCKFILE,
BUN_LOCKFILE_BINARY,
];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Consider using as const assertion for LOCK_FILES array to make it readonly and more type-safe

Suggested change
export const LOCK_FILES = [
NPM_LOCKFILE,
PNPM_LOCKFILE,
YARN_LOCKFILE,
BUN_LOCKFILE,
BUN_LOCKFILE_BINARY,
];
export const LOCK_FILES = [
NPM_LOCKFILE,
PNPM_LOCKFILE,
YARN_LOCKFILE,
BUN_LOCKFILE,
BUN_LOCKFILE_BINARY,
] as const;

Comment on lines +140 to +141

await blocker.check({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: missing assertion - result of blocker.check() is not being verified

Suggested change
await blocker.check({
const result = await blocker.check({
packageJson: {
dependencies: {},
devDependencies: {
'@storybook/experimental-addon-test': '^1.0.0',
},
},
packageManager: mockPackageManager as any,
} as any);
expect(result).toBe(false);

Comment on lines 18 to 19
// @ts-expect-error Ignore abstract class error
jsPackageManager = new JsPackageManager();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Consider creating a proper test implementation class instead of using @ts-expect-error to instantiate abstract class

Comment on lines +28 to +47
switch (data.packageName) {
case '@storybook/preact-webpack5':
case '@storybook/preset-preact-webpack':
title = 'Preact Webpack5 support removed';
break;
case '@storybook/vue3-webpack5':
case '@storybook/preset-vue3-webpack':
title = 'Vue3 Webpack5 support removed';
break;
case '@storybook/html-webpack5':
case '@storybook/preset-html-webpack':
title = 'HTML Webpack5 support removed';
break;
case '@storybook/web-components-webpack5':
title = 'Web Components Webpack5 support removed';
break;
case '@storybook/svelte-webpack5':
title = 'Svelte Webpack5 support removed';
break;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Consider using an object map for title lookups instead of switch statement for better maintainability

Comment on lines +345 to +346
// is either not selected by the user (for a particular proejct)
// therefore we need to check for configDir as well as fix id matches
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

syntax: Typo in comment 'proejct' -> 'project'

Suggested change
// is either not selected by the user (for a particular proejct)
// therefore we need to check for configDir as well as fix id matches
// is either not selected by the user (for a particular project)
// therefore we need to check for configDir as well as fix id matches

return {
title: 'Downgrade Not Supported',
message: dedent`
Your Storybook version (v${data.currentVersion}) is newer than the target release (v${versions.storybook}).Downgrading is not supported.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

syntax: Missing space after period in error message

Suggested change
Your Storybook version (v${data.currentVersion}) is newer than the target release (v${versions.storybook}).Downgrading is not supported.
Your Storybook version (v${data.currentVersion}) is newer than the target release (v${versions.storybook}). Downgrading is not supported.

Comment on lines +15 to +16
- Vitest configuration is in `code/vitest.workspace.ts`
- Test files typically follow the pattern `*.test.ts`, `*.test.tsx`, `*.spec.ts`, or `*.spec.tsx`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Test pattern list is incomplete. Should also include .stories.test.ts which is commonly used for story testing in Storybook.

"wallaby": {
"command": "node",
"args": [
"~/.wallaby/mcp/"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Using '~/' for home directory path may cause issues on Windows. Consider using platform-agnostic path resolution

Comment on lines +364 to +366
storybookProjects.some((project) => {
if (!project.isCanary && lt(project.currentCLIVersion, project.beforeVersion)) {
throw new UpgradeStorybookToLowerVersionError({
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Use every instead of some to ensure all projects are checked. Current code stops checking after first valid project

Suggested change
storybookProjects.some((project) => {
if (!project.isCanary && lt(project.currentCLIVersion, project.beforeVersion)) {
throw new UpgradeStorybookToLowerVersionError({
storybookProjects.forEach((project) => {
if (!project.isCanary && lt(project.currentCLIVersion, project.beforeVersion)) {
throw new UpgradeStorybookToLowerVersionError({

Comment on lines 48 to 51
const files = await searchFiles({
searchQuery,
cwd: projectRoot,
cwd: getProjectRoot(),
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Consider caching getProjectRoot() result to avoid multiple calls in the map function

@yannbf yannbf added ci:daily Run the CI jobs that normally run in the daily job. freeze Freeze the Release PR with this label labels Jun 10, 2025
Copy link

nx-cloud bot commented Jun 10, 2025

View your CI Pipeline Execution ↗ for commit 2506beb.

Command Status Duration Result
nx run-many -t check -c production --parallel=7 ✅ Succeeded 1s View ↗
nx run-many -t build -c production --parallel=3 ✅ Succeeded 2s View ↗

☁️ Nx Cloud last updated this comment at 2025-06-11 09:31:33 UTC

@storybook-pr-benchmarking
Copy link

storybook-pr-benchmarking bot commented Jun 10, 2025

Package Benchmarks

Commit: 2506beb, ran on 11 June 2025 at 09:38:03 UTC

The following packages have significant changes to their size or dependencies:

@storybook/addon-vitest

Before After Difference
Dependency count 6 6 0
Self size 630 KB 553 KB 🎉 -77 KB 🎉
Dependency size 1.49 MB 1.49 MB 0 B
Bundle Size Analyzer Link Link

storybook

Before After Difference
Dependency count 49 49 0
Self size 31.22 MB 31.88 MB 🚨 +662 KB 🚨
Dependency size 17.41 MB 17.41 MB 0 B
Bundle Size Analyzer Link Link

@storybook/angular

Before After Difference
Dependency count 208 209 🚨 +1 🚨
Self size 606 KB 607 KB 🚨 +549 B 🚨
Dependency size 29.78 MB 29.79 MB 🚨 +15 KB 🚨
Bundle Size Analyzer Link Link

@storybook/ember

Before After Difference
Dependency count 208 205 🎉 -3 🎉
Self size 28 KB 28 KB 🚨 +179 B 🚨
Dependency size 28.94 MB 28.93 MB 🎉 -18 KB 🎉
Bundle Size Analyzer Link Link

@storybook/nextjs

Before After Difference
Dependency count 534 531 🎉 -3 🎉
Self size 217 KB 217 KB 🚨 +10 B 🚨
Dependency size 58.94 MB 58.92 MB 🎉 -18 KB 🎉
Bundle Size Analyzer Link Link

@storybook/nextjs-vite

Before After Difference
Dependency count 127 128 🚨 +1 🚨
Self size 2.39 MB 2.39 MB 0 B
Dependency size 22.12 MB 22.14 MB 🚨 +15 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-native-web-vite

Before After Difference
Dependency count 161 162 🚨 +1 🚨
Self size 35 KB 35 KB 🚨 +129 B 🚨
Dependency size 23.29 MB 23.30 MB 🚨 +15 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-vite

Before After Difference
Dependency count 120 121 🚨 +1 🚨
Self size 32 KB 32 KB 🚨 +97 B 🚨
Dependency size 20.23 MB 20.24 MB 🚨 +15 KB 🚨
Bundle Size Analyzer Link Link

@storybook/react-webpack5

Before After Difference
Dependency count 284 286 🚨 +2 🚨
Self size 25 KB 25 KB 0 B
Dependency size 43.66 MB 43.68 MB 🚨 +19 KB 🚨
Bundle Size Analyzer Link Link

sb

Before After Difference
Dependency count 50 50 0
Self size 1 KB 1 KB 0 B
Dependency size 48.63 MB 49.29 MB 🚨 +662 KB 🚨
Bundle Size Analyzer Link Link

@storybook/cli

Before After Difference
Dependency count 324 324 0
Self size 244 KB 235 KB 🎉 -9 KB 🎉
Dependency size 98.82 MB 99.89 MB 🚨 +1.07 MB 🚨
Bundle Size Analyzer Link Link

@storybook/codemod

Before After Difference
Dependency count 267 267 0
Self size 31 KB 31 KB 🚨 +209 B 🚨
Dependency size 82.11 MB 82.77 MB 🚨 +666 KB 🚨
Bundle Size Analyzer Link Link

create-storybook

Before After Difference
Dependency count 1 1 0
Self size 12.13 MB 12.53 MB 🚨 +402 KB 🚨
Dependency size 98 KB 98 KB 0 B
Bundle Size Analyzer Link Link

@storybook/preset-react-webpack

Before After Difference
Dependency count 175 177 🚨 +2 🚨
Self size 24 KB 24 KB 🚨 +171 B 🚨
Dependency size 30.49 MB 30.51 MB 🚨 +19 KB 🚨
Bundle Size Analyzer Link Link

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

196 files reviewed, 28 comments
Edit PR Review Bot Settings | Greptile

appDir: `${dir}/apps`,
rootDir: projectRoot,
pagesDir: `${projectRoot}/pages`,
appDir: `${projectRoot}/apps`,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Path is hardcoded to 'apps' which may not match Next.js app directory convention of 'app'. Consider using nextConfig.appDir or defaulting to 'app'

Comment on lines +69 to +71
newLogger.error(
msg.replace(message.toString(), colors.red(message.toString())).replaceAll(process.cwd(), '.')
);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Using replaceAll on process.cwd() could cause issues if the path contains regex special characters


export interface ProjectDoctorResults {
configDir: string;
status: 'healthy' | 'has_issues' | 'check_error';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Use enum for status values instead of string literal type for consistency with other status handling

Comment on lines 192 to +195
let removeAddon = removeAddonBase;
const packageManager = JsPackageManagerFactory.getPackageManager({
configDir: options.configDir,
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: Package manager initialization should be inside the if block to avoid unnecessary instantiation when telemetry is disabled


fireEvent.submit(dialog.getElementsByTagName('form')[0]);
await fireEvent.submit(dialog.getElementsByTagName('form')[0]);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: consider using queryByRole('form') instead of getElementsByTagName for consistency with other queries

Comment on lines +662 to +666
if (ignoreError) {
execaProcess.catch((err) => {
// Silently ignore errors when ignoreError is true
});
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Error suppression in catch block could hide important errors - at minimum log to debug level

Comment on lines +85 to +93
vi.spyOn(JsPackageManager, 'getPackageJson').mockImplementation((args) => {
return {
dependencies: {},
devDependencies: {
'@storybook/manager-webpack5': 'x.x.x',
'@storybook/react': 'x.x.x',
},
};
});
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: args parameter in mockImplementation is unused - remove from function signature

Suggested change
vi.spyOn(JsPackageManager, 'getPackageJson').mockImplementation((args) => {
return {
dependencies: {},
devDependencies: {
'@storybook/manager-webpack5': 'x.x.x',
'@storybook/react': 'x.x.x',
},
};
});
vi.spyOn(JsPackageManager, 'getPackageJson').mockImplementation(() => {
return {
dependencies: {},
devDependencies: {
'@storybook/manager-webpack5': 'x.x.x',
'@storybook/react': 'x.x.x',
},
};
});

if (
beforeVersion === null ||
afterVersion === null ||
allDependencies[packageName] === null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logic: allDependencies[packageName] === null check is redundant since getAllDependencies() returns Record<string, string>

import { promises as fs } from 'node:fs';
import path, { join } from 'node:path';

import { cleanLog } from '../../../../lib/cli-storybook/src/automigrate/helpers/cleanLog';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Importing cleanLog from a relative path that traverses up multiple directories can be fragile. Consider moving cleanLog to a shared utilities package or updating the import structure

@@ -1,9 +1,11 @@
import { dirname, join } from 'node:path';

import { sync as findUpSync } from 'find-up';
import { getProjectRoot } from 'storybook/internal/common';
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

style: Internal imports should come after external dependencies

@yannbf yannbf removed the freeze Freeze the Release PR with this label label Jun 11, 2025
@storybook-bot storybook-bot force-pushed the version-non-patch-from-9.1.0-alpha.5 branch from 56340df to 2506beb Compare June 11, 2025 09:29
@yannbf yannbf merged commit 19ef69c into next-release Jun 11, 2025
91 checks passed
@yannbf yannbf deleted the version-non-patch-from-9.1.0-alpha.5 branch June 11, 2025 10:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci:daily Run the CI jobs that normally run in the daily job. release For PRs that trigger new releases. Automated
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants