fix(storybook): silence NODE_ENV DefinePlugin warning; revert CI memory cap to 4g
CI / frontend (push) Successful in 2m22s
CI / backend (push) Successful in 1m46s
CI / storybook-a11y (push) Successful in 7m39s
CI / e2e (push) Successful in 4m1s
CI / semgrep (push) Successful in 1m2s
CI / api-client-drift (push) Successful in 1m58s

.storybook/main.ts: webpack core's auto-DefinePlugin (from optimization.nodeEnv)
and Storybook's own preset both define process.env.NODE_ENV on the same
compile, triggering a "Conflicting values" warning even though both resolve
to "development" locally. Disable the redundant one via webpackFinal.

ci.yml: revert the storybook-a11y container's memory cap 6g -> 4g. The 6g
bump was based on an unconstrained local RSS measurement (~5.8GB) that
doesn't reflect real behavior under a cgroup cap. Verified directly: running
this job's exact steps (npm ci, playwright install, build-storybook,
test-storybook:ci) in `docker run --cpus=2 --memory=4g --memory-swap=4g
node:24-bookworm` completes clean, no OOM, 62/62 suites passing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
eho
2026-07-30 07:47:25 +02:00
co-authored by Claude Sonnet 5
parent c4dd846fbb
commit f356dc7329
2 changed files with 14 additions and 3 deletions
+7 -3
View File
@@ -49,13 +49,17 @@ jobs:
# Hard resource ceiling so a runaway test-storybook (one headless Chromium per Jest # Hard resource ceiling so a runaway test-storybook (one headless Chromium per Jest
# worker) can't OOM the runner host — it fails its own container instead. The real cap # worker) can't OOM the runner host — it fails its own container instead. The real cap
# is `--maxWorkers=2` in test-storybook:ci; this is the belt-and-suspenders guardrail. # is `--maxWorkers=2` in test-storybook:ci; this is the belt-and-suspenders guardrail.
# 6g (was 4g): build-storybook alone (compodoc + full Angular AOT build) measured ~5.8GB # 4g is enough: verified by running this job's exact steps (npm ci, playwright install,
# peak RSS locally, leaving too little headroom at 4g. # build-storybook, test-storybook:ci) in `docker run --cpus=2 --memory=4g
# --memory-swap=4g node:24-bookworm` locally — completes clean, no OOM. (An earlier
# unconstrained local RSS measurement of build-storybook alone suggested ~5.8GB was
# needed, but that number reflects what Node/V8 is willing to use when memory is
# plentiful, not what the job actually needs under a real cgroup cap.)
# NB: requires the Gitea act_runner to allow container jobs (docker mode). If the runner # NB: requires the Gitea act_runner to allow container jobs (docker mode). If the runner
# is host-only, drop this `container:` block and rely on the worker cap alone. # is host-only, drop this `container:` block and rely on the worker cap alone.
container: container:
image: node:24-bookworm image: node:24-bookworm
options: --cpus=2 --memory=6g --memory-swap=6g options: --cpus=2 --memory=4g --memory-swap=4g
timeout-minutes: 15 timeout-minutes: 15
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
+7
View File
@@ -17,5 +17,12 @@ const config: StorybookConfig = {
// Serve the vendored CIBG package so preview-head.html can <link> its CSS (and its // Serve the vendored CIBG package so preview-head.html can <link> its CSS (and its
// relative font/icon/image url()s resolve) — mirrors index.html for the real app. // relative font/icon/image url()s resolve) — mirrors index.html for the real app.
staticDirs: ['../public'], staticDirs: ['../public'],
// Webpack's own auto-DefinePlugin (from `optimization.nodeEnv`) and Storybook's preset both
// define `process.env.NODE_ENV` on the same compile, which webpack warns about as
// "Conflicting values" even though they resolve to the same string. Disable the redundant one.
webpackFinal: async (config) => {
config.optimization = { ...config.optimization, nodeEnv: false };
return config;
},
}; };
export default config; export default config;