pcbjam/docker/docker-compose.yml
Istvan Matejcsok 680eb9dc15 perf(build): 4h05m -> 1h15m full CI build — docker caps, pipelined wasm-opt, Binaryen 130
Three orchestration fixes, validated end-to-end on the Hetzner ccx53
(run 27280051992, 1h14m41s vs 4h05m baseline, e2e identical):

- docker-compose CPU/memory caps were hardcoded to dev-Mac defaults
  (10 CPUs / 32G); now env-tunable via KICAD_DOCKER_CPUS/KICAD_DOCKER_MEM
  (CI exports nproc/110G — the 32-core runner was compiling on 10 cores).
- docker/build.sh: split build_app into compile_app (container) +
  postprocess_app (host-side dyncall shims + finalize + asyncify + -O2)
  and added KICAD_PIPELINE=1 mode that overlaps each tool's host-side
  wasm-opt with the next tool's container compile (max 2 concurrent
  postprocesses — pcbnew -O2 peaks ~34G RSS). Also: comma-separated app
  lists for cheap pipeline repros.
- get-wasm-opt.sh: Binaryen default 121 -> 130 (fixes the v121 -O2 lock
  convoy, ~9x) and BINARYEN_BUILD_FROM_SOURCE=1 support: the official
  x86_64-linux release tarballs (Alpine/musl, no LTO, assertions on) run
  asyncify 4x slower than a stock gcc -O3+LTO build with sha256-identical
  output; self-build takes ~5 min and is instantly repaid.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 07:48:46 +02:00

35 lines
1.2 KiB
YAML

services:
kicad-wasm-builder:
build:
context: ..
dockerfile: docker/Dockerfile
# Container name is auto-generated with project prefix (set in build.sh)
# Resource limits. Defaults are sized for a dev Mac (Docker Desktop VM).
# CI overrides via env: the 32-core Hetzner runner sets KICAD_DOCKER_CPUS=$(nproc)
# and KICAD_DOCKER_MEM=110G — with the 10-CPU default, run 27226030304 compiled
# everything on 10 of 32 cores while passing -j 32 (3x oversubscribed).
deploy:
resources:
limits:
cpus: '${KICAD_DOCKER_CPUS:-10}'
memory: ${KICAD_DOCKER_MEM:-32G}
volumes:
# Host source mounted read-only at staging location
# (rsync'd to /workspace on container start to fix macOS timestamp issues)
- ..:/workspace-host:ro
# Synced source in Docker volume (consistent timestamps)
- workspace-src:/workspace
# Named volume for build cache (faster than bind mount on macOS)
- kicad-build-cache:/workspace/build-wasm
# Output directory for easy access to final WASM files
- ../output:/workspace/output
# Keep container running for interactive use
stdin_open: true
tty: true
volumes:
kicad-build-cache:
workspace-src: