Root cause of 6+ min builds: Dockerfile stage 1 ran 'npm install' with no
package-lock.json, so every build re-resolved + re-fetched the full npm tree
from scratch on a fresh runner.
- Dockerfile: replace node:22-slim+npm stage with oven/bun:1-slim; both
stages now 'bun install --frozen-lockfile' against the tracked bun.lock;
--mount=type=cache for the bun install cache
- workflow: switch to docker/build-push-action with registry buildcache
(cache-from + cache-to) so layers persist across runs
- dockerignore: add .worktrees, docs, tests, tsbuildinfo so the build context
ships less
workflow builds on push to main, tags with latest + calver from
package.json, pushes to git.felixfoertsch.de container registry.
docker-compose.yml now pulls from registry instead of building locally.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>