An idle builder keeps the Docker Desktop VM ballooned: each per-worktree
compose project carries its own ${KICAD_DOCKER_MEM:-32G} cap, build.sh left
the container running afterwards ("interactive use"), and two forgotten
builders plus the VM's page-cache/high-water behavior read as ~56 GB of host
RAM during a ~20 GB build.
stop_builder() now runs from the EXIT trap on every path (success, failure,
Ctrl-C — both the sequential and the pipeline-mode trap). The container is
pure scaffolding — all caches live in the named volumes and `up -d` restarts
it in seconds — so stopping costs nothing. KICAD_KEEP_CONTAINER=1 restores
the old keep-running behavior for interactive debugging; docker/shell.sh is
unaffected (it does its own `up -d`).
Verified live: the full `all --build-deps` run on main left zero containers
running at exit.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
43 lines
1.9 KiB
YAML
43 lines
1.9 KiB
YAML
services:
|
|
kicad-wasm-builder:
|
|
build:
|
|
context: ..
|
|
dockerfile: docker/Dockerfile
|
|
args:
|
|
# Single source of truth: scripts/common/versions.sh, exported into the env by the scripts
|
|
# that drive compose (docker/build.sh, docker/shell.sh). No default -> the Dockerfile fails
|
|
# fast if it's unset, so the image can't be built against the wrong toolchain.
|
|
EMSCRIPTEN_VERSION: ${EMSCRIPTEN_VERSION:?source scripts/common/versions.sh before docker compose}
|
|
# 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 the container alive so build.sh can `exec` its stages into it.
|
|
# build.sh STOPS it when the build exits (idle builders keep the Docker
|
|
# Desktop VM ballooned — 32G cap per per-worktree compose project); set
|
|
# KICAD_KEEP_CONTAINER=1 to keep it running afterwards for interactive use.
|
|
stdin_open: true
|
|
tty: true
|
|
|
|
volumes:
|
|
kicad-build-cache:
|
|
workspace-src:
|