Gitea's act runner re-clones every referenced GitHub action on every build
because it has no action cache. docker/setup-buildx-action alone was taking
~2 minutes to clone before the build even started.
buildx is already bundled in gitea/runner-images:ubuntu-latest, so call
'docker buildx build --push' directly with --cache-from/--cache-to pointing
at a registry buildcache tag. Keeps the layer caching benefit, skips the
action-clone tax entirely.
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>