mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-22 11:41:10 +00:00
* perf(ci): cache packaged dependency reify in the docker e2e functional image Split the shared functional E2E image into manifest -> deps -> app stages so the 328-package npm reify is layer-keyed on package.json + npm-shrinkwrap.json alone. Per-PR tarballs (changed dist bytes, unchanged deps) now hit the cached dependency layer on warm builders (Blacksmith sticky docker layers, local buildkit) instead of re-running npm install on every build; the per-PR work drops to manifest extract + package extract + packaged postinstall. The deps stage reify also matches the shipped shrinkwrap exactly; the previous npm install -g <tarball> path silently drifted ~15 transitive packages to newer registry versions and lost the node-domexception -> @nolyfill/domexception alias. npm install (not npm ci) because the generated shrinkwrap does not guarantee npm ci's strict manifest sync (p-retry pins @types/retry@0.12.0 while the shrinkwrap resolves 0.12.5). Local proof (Apple Silicon, docker-container builder): per-PR warm image build 59s -> 43s with the 29s npm layer CACHED; lane total 164s -> 139s warm, 229s -> 160s cold; system-agent-first-run lane passes end to end, and the installed tree matches the old image structure except for the documented version-drift fixes. * test: update e2e image guard for the staged dependency layer The guard pinned the retired npm install -g invocation; assert the new invariants instead: manifest-keyed deps layer, no global-prefix install, deps COPY into /app, and postinstall ordered before the self-link so its prune walks cannot cycle.