Skip to content

Commit

Permalink
Merge pull request #24566 from storybookjs/kasper/test-build-bench
Browse files Browse the repository at this point in the history
Build: Implement test build bench
kasperpeulen authored Oct 24, 2023
2 parents fd539a7 + c64fada commit 5a68ab9
Showing 9 changed files with 130 additions and 1 deletion.
39 changes: 39 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -341,6 +341,30 @@ jobs:
paths:
- sandbox/*/bench/*.json
- sandbox/*/storybook-static
build-test-sandboxes:
parameters:
parallelism:
type: integer
executor:
class: large
name: sb_node_16_browsers
parallelism: << parameters.parallelism >>
steps:
- git-shallow-clone/checkout_advanced:
clone_options: '--depth 1 --verbose'
- attach_workspace:
at: .
- run:
name: Building Sandboxes
command: yarn task --task test-build --template $(yarn get-template --cadence << pipeline.parameters.workflow >> --task build) --no-link --start-from=never --junit
- report-workflow-on-failure:
template: $(yarn get-template --cadence << pipeline.parameters.workflow >> --task build)
- store_test_results:
path: test-results
- persist_to_workspace:
root: .
paths:
- sandbox/*/bench/test-build.json
test-runner-production:
parameters:
parallelism:
@@ -502,6 +526,10 @@ workflows:
parallelism: 12
requires:
- build
- build-test-sandboxes:
parallelism: 12
requires:
- create-sandboxes
- build-sandboxes:
parallelism: 12
requires:
@@ -526,6 +554,7 @@ workflows:
parallelism: 3
requires:
- build-sandboxes
- build-test-sandboxes
# TODO: reenable once we find out the source of flakyness
# - test-runner-dev:
# requires:
@@ -558,6 +587,10 @@ workflows:
parallelism: 21
requires:
- build
- build-test-sandboxes:
parallelism: 12
requires:
- create-sandboxes
- build-sandboxes:
parallelism: 21
requires:
@@ -582,6 +615,7 @@ workflows:
parallelism: 3
requires:
- build-sandboxes
- build-test-sandboxes
# TODO: reenable once we find out the source of flakyness
# - test-runner-dev:
# parallelism: 4
@@ -615,6 +649,10 @@ workflows:
# - smoke-test-sandboxes: # disabled for now
# requires:
# - create-sandboxes
- build-test-sandboxes:
parallelism: 12
requires:
- create-sandboxes
- build-sandboxes:
parallelism: 36
requires:
@@ -640,3 +678,4 @@ workflows:
# parallelism: 4
# requires:
# - create-sandboxes

Original file line number Diff line number Diff line change
@@ -33,6 +33,7 @@ addToGlobalContext('cliVersion', versions.storybook);
export type StorybookBuilderOptions = JsonObject & {
browserTarget?: string | null;
tsConfig?: string;
test: boolean;
docs: boolean;
compodoc: boolean;
compodocArgs: string[];
Original file line number Diff line number Diff line change
@@ -49,6 +49,11 @@
"description": "Starts Storybook in documentation mode. Learn more about it : https://storybook.js.org/docs/react/writing-docs/build-documentation#preview-storybooks-documentation.",
"default": false
},
"test": {
"type": "boolean",
"description": "Build the static version of the sandbox optimized for testing purposes",
"default": false
},
"compodoc": {
"type": "boolean",
"description": "Execute compodoc before.",
1 change: 1 addition & 0 deletions code/lib/cli/src/generate.ts
Original file line number Diff line number Diff line change
@@ -259,6 +259,7 @@ command('build')
)
.option('--force-build-preview', 'Build the preview iframe even if you are using --preview-url')
.option('--docs', 'Build a documentation-only site using addon-docs')
.option('--test', 'Build stories optimized for testing purposes.')
.action(async (options) => {
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
logger.setLevel(program.loglevel);
9 changes: 9 additions & 0 deletions scripts/bench/bench.schema
Original file line number Diff line number Diff line change
@@ -18,6 +18,15 @@ buildSbPreviewSize: INTEGER,
buildStaticSize: INTEGER,
buildPrebuildSize: INTEGER,
buildPreviewSize: INTEGER,
testBuildTime: INTEGER,
testBuildSize: INTEGER,
testBuildSbAddonsSize: INTEGER,
testBuildSbCommonSize: INTEGER,
testBuildSbManagerSize: INTEGER,
testBuildSbPreviewSize: INTEGER,
testBuildStaticSize: INTEGER,
testBuildPrebuildSize: INTEGER,
testBuildPreviewSize: INTEGER,
devPreviewResponsive: INTEGER,
devManagerResponsive: INTEGER,
devManagerHeaderVisible: INTEGER,
18 changes: 18 additions & 0 deletions scripts/bench/types.ts
Original file line number Diff line number Diff line change
@@ -38,6 +38,24 @@ export interface BenchResults {
buildPrebuildSize: number;
/** Total size of everything else (user's stories & components & CSS & assets etc.) */
buildPreviewSize: number;
/** Full `sb build` time */
testBuildTime: number;
/** Size of the storybook-static directory in total */
testBuildSize: number;
/** Size of the storybook-static/sb-addons in total */
testBuildSbAddonsSize: number;
/** Size of the storybook-static/sb-common-assets */
testBuildSbCommonSize: number;
/** Size of the storybook-static/sb-manager */
testBuildSbManagerSize: number;
/** Size of storybook-static/sb-preview */
testBuildSbPreviewSize: number;
/** Size of the `static` directory if it exists */
testBuildStaticSize: number;
/** Total size of `sb-x` above */
testBuildPrebuildSize: number;
/** Total size of everything else (user's stories & components & CSS & assets etc.) */
testBuildPreviewSize: number;
/** Time to wait-on iframe.html */
devPreviewResponsive: number;
/** Time to wait-on index.html */
3 changes: 2 additions & 1 deletion scripts/task.ts
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@ import { sandbox } from './tasks/sandbox';
import { syncDocs } from './tasks/sync-docs';
import { dev } from './tasks/dev';
import { smokeTest } from './tasks/smoke-test';
import { build } from './tasks/build';
import { build, testBuild } from './tasks/build';
import { serve } from './tasks/serve';
import { testRunnerBuild } from './tasks/test-runner-build';
import { testRunnerDev } from './tasks/test-runner-dev';
@@ -103,6 +103,7 @@ export const tasks = {
dev,
'smoke-test': smokeTest,
build,
'test-build': testBuild,
serve,
'test-runner': testRunnerBuild,
'test-runner-dev': testRunnerDev,
46 changes: 46 additions & 0 deletions scripts/tasks/build.ts
Original file line number Diff line number Diff line change
@@ -48,3 +48,49 @@ export const build: Task = {
);
},
};

export const testBuild: Task = {
description: 'Build the static version of the sandbox optimized for testing purposes',
dependsOn: ['sandbox'],
async ready({ builtSandboxDir }) {
return pathExists(builtSandboxDir);
},
async run({ sandboxDir }, { dryRun, debug }) {
const start = now();

await exec(`yarn build-storybook --test --quiet`, { cwd: sandboxDir }, { dryRun, debug });

const testBuildTime = now() - start;
const dir = join(sandboxDir, 'storybook-static');
const getSize = promisify(dirSize);
const testBuildSize = await getSize(dir);
const testBuildSbAddonsSize = await getSize(join(dir, 'sb-addons'));
const testBuildSbCommonSize = await getSize(join(dir, 'sb-common-assets'));
const testBuildSbManagerSize = await getSize(join(dir, 'sb-manager'));
const testBuildSbPreviewSize = await getSize(join(dir, 'sb-preview'));
const testBuildPrebuildSize =
testBuildSbAddonsSize +
testBuildSbCommonSize +
testBuildSbManagerSize +
testBuildSbPreviewSize;

const testBuildStaticSize = await getSize(join(dir, 'static')).catch(() => 0);
const testBuildPreviewSize = testBuildSize - testBuildPrebuildSize - testBuildStaticSize;

await saveBench(
'test-build',
{
testBuildTime,
testBuildSize,
testBuildSbAddonsSize,
testBuildSbCommonSize,
testBuildSbManagerSize,
testBuildSbPreviewSize,
testBuildStaticSize,
testBuildPrebuildSize,
testBuildPreviewSize,
},
{ rootDir: sandboxDir }
);
},
};
9 changes: 9 additions & 0 deletions scripts/upload-bench.ts
Original file line number Diff line number Diff line change
@@ -34,6 +34,15 @@ const defaults: Record<keyof BenchResults, null> = {
buildStaticSize: null,
buildPrebuildSize: null,
buildPreviewSize: null,
testBuildTime: null,
testBuildSize: null,
testBuildSbAddonsSize: null,
testBuildSbCommonSize: null,
testBuildSbManagerSize: null,
testBuildSbPreviewSize: null,
testBuildStaticSize: null,
testBuildPrebuildSize: null,
testBuildPreviewSize: null,
devPreviewResponsive: null,
devManagerResponsive: null,
devManagerHeaderVisible: null,

0 comments on commit 5a68ab9

Please sign in to comment.