Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Addon-Test: Make sure that only one global portable story config is ever loaded #30582

Merged
merged 3 commits into from
Feb 19, 2025

Conversation

kasperpeulen
Copy link
Contributor

@kasperpeulen kasperpeulen commented Feb 19, 2025

What I did

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

This section is mandatory for all contributions. If you believe no manual test is necessary, please state so explicitly. Thanks!

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update
    MIGRATION.MD

Checklist for Maintainers

  • When this PR is ready for testing, make sure to add ci:normal, ci:merged or ci:daily GH label to it to run a specific set of sandboxes. The particular set of sandboxes can be found in code/lib/cli-storybook/src/sandbox-templates.ts

  • Make sure this PR contains one of the labels below:

    Available labels
    • bug: Internal changes that fixes incorrect behavior.
    • maintenance: User-facing maintenance tasks.
    • dependencies: Upgrading (sometimes downgrading) dependencies.
    • build: Internal-facing build tooling & test updates. Will not show up in release changelog.
    • cleanup: Minor cleanup style change. Will not show up in release changelog.
    • documentation: Documentation only changes. Will not show up in release changelog.
    • feature request: Introducing a new feature.
    • BREAKING CHANGE: Changes that break compatibility in some way with current major version.
    • other: Changes that don't fit in the above categories.

🦋 Canary release

This PR does not have a canary release associated. You can request a canary release of this pull request by mentioning the @storybookjs/core team here.

core team members can create a canary release here or locally with gh workflow run --repo storybookjs/storybook canary-release-pr.yml --field pr=<PR_NUMBER>

name before after diff z %
createSize 0 B 0 B 0 B - -
generateSize 80.5 MB 80.5 MB 29 kB -1.4 0%
initSize 80.5 MB 80.5 MB 29 kB -1.4 0%
diffSize 97 B 97 B 0 B - 0%
buildSize 7.31 MB 7.31 MB 263 B 8.29 0%
buildSbAddonsSize 1.9 MB 1.9 MB 129 B -2.8 0%
buildSbCommonSize 195 kB 195 kB 0 B - 0%
buildSbManagerSize 1.88 MB 1.88 MB 0 B 4.36 0%
buildSbPreviewSize 0 B 0 B 0 B - -
buildStaticSize 0 B 0 B 0 B - -
buildPrebuildSize 3.97 MB 3.97 MB 129 B 6.26 0%
buildPreviewSize 3.34 MB 3.34 MB 134 B 26.73 0%
testBuildSize 0 B 0 B 0 B - -
testBuildSbAddonsSize 0 B 0 B 0 B - -
testBuildSbCommonSize 0 B 0 B 0 B - -
testBuildSbManagerSize 0 B 0 B 0 B - -
testBuildSbPreviewSize 0 B 0 B 0 B - -
testBuildStaticSize 0 B 0 B 0 B - -
testBuildPrebuildSize 0 B 0 B 0 B - -
testBuildPreviewSize 0 B 0 B 0 B - -
name before after diff z %
createTime 15.9s 12.5s -3s -424ms -0.28 -27.4%
generateTime 20.8s 19s -1s -780ms -0.66 -9.3%
initTime 4.7s 4.4s -263ms -0.64 -5.9%
buildTime 10.5s 8.6s -1s -918ms -0.89 -22.2%
testBuildTime 0ms 0ms 0ms - -
devPreviewResponsive 5.1s 4.8s -293ms -1.13 -6.1%
devManagerResponsive 3.8s 3.5s -311ms -1.28 🔰-8.7%
devManagerHeaderVisible 871ms 754ms -117ms -0.4 -15.5%
devManagerIndexVisible 907ms 764ms -143ms -0.52 -18.7%
devStoryVisibleUncached 4.1s 3.9s -186ms 0.08 -4.7%
devStoryVisible 907ms 825ms -82ms -0.27 -9.9%
devAutodocsVisible 841ms 758ms -83ms -0.31 -10.9%
devMDXVisible 823ms 701ms -122ms -0.91 -17.4%
buildManagerHeaderVisible 683ms 581ms -102ms -1.85 🔰-17.6%
buildManagerIndexVisible 695ms 622ms -73ms -1.73 🔰-11.7%
buildStoryVisible 667ms 568ms -99ms -1.74 🔰-17.4%
buildAutodocsVisible 620ms 490ms -130ms -1.18 -26.5%
buildMDXVisible 571ms 508ms -63ms -1.47 🔰-12.4%

Greptile Summary

Based on the provided information, I'll create a concise summary of the pull request changes:

Enhanced Vitest integration in Storybook's addon-test by adding automatic detection and execution of beforeAll lifecycle methods.

  • Added caching mechanism in csf-factories.ts for composed project annotations to improve performance
  • Modified test-utils.ts to use composeConfigs for handling story previews with CSF3/CSF4 compatibility
  • Introduced globalThis.csf4Preview in setup-file.ts to store and access preview instance globally
  • Updated portable-stories.ts to properly compose default and global annotations for project configuration

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.

4 file(s) reviewed, 4 comment(s)
Edit PR Review Bot Settings | Greptile

annotations.preview,
// get the story preview, or fallback to the global csf4 preview, if CSF3 is used alongside a CSF4 preview file
composeConfigs([
annotations.preview ?? globalThis.csf4Preview.composed,
Copy link
Contributor

Choose a reason for hiding this comment

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

logic: Accessing globalThis.csf4Preview.composed without type checking could cause runtime errors if csf4Preview is undefined

): Preview<TRenderer> {
return {
let composed: NormalizedProjectAnnotations<TRenderer>;
Copy link
Contributor

Choose a reason for hiding this comment

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

logic: mutable variable could lead to race conditions if multiple previews are initialized concurrently

Comment on lines 38 to 42
beforeAll(() => {
if (globalThis.csf4Preview) {
return globalThis.csf4Preview.composed.beforeAll();
}
});
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 handling the case where csf4Preview.composed exists but beforeAll() is undefined

},
meta(meta: ComponentAnnotations<TRenderer>) {
return defineMeta(meta, this);
},
};
globalThis.csf4Preview = preview;
Copy link
Contributor

Choose a reason for hiding this comment

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

style: setting global variable could cause issues in environments with multiple preview instances

Copy link

nx-cloud bot commented Feb 19, 2025

View your CI Pipeline Execution ↗ for commit a2d4030.

Command Status Duration Result
nx run-many -t build --parallel=3 ✅ Succeeded 1m 59s View ↗

☁️ Nx Cloud last updated this comment at 2025-02-19 14:26:09 UTC

@kasperpeulen kasperpeulen force-pushed the kasper/automatic-before-all branch from b0f5d66 to 308d77a Compare February 19, 2025 13:33
@kasperpeulen kasperpeulen changed the title Addon-Test: Automatically detect beforeAll in vitest Addon-Test: Make sure that only one global portable story config is ever loaded Feb 19, 2025
Copy link
Contributor

@valentinpalkovic valentinpalkovic left a comment

Choose a reason for hiding this comment

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

LGTM. Pair-reviewed with @kasperpeulen

@kasperpeulen kasperpeulen merged commit b605663 into next Feb 19, 2025
59 checks passed
@kasperpeulen kasperpeulen deleted the kasper/automatic-before-all branch February 19, 2025 15:02
@github-actions github-actions bot mentioned this pull request Feb 19, 2025
11 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants