Optimize CI build pipeline (~15 min → ~3-5 min) #59

Merged
chrisp merged 2 commits from ci/build-optimization into main 2026-05-31 04:35:06 +00:00

2 commits

Author SHA1 Message Date
Chris Parsons
bbf4aa4668 Remove setup-node from CI jobs — runner has Node pre-installed
All checks were successful
🚀 Deploy / 🧪 Test (pull_request) Successful in 1m34s
🚀 Deploy / ʦ TypeScript (pull_request) Successful in 1m25s
🚀 Deploy / 🔍 Lint (pull_request) Successful in 53s
🚀 Deploy / 🐳 Build (pull_request) Has been skipped
🚀 Deploy / 🚀 Deploy (pull_request) Has been skipped
setup-node@v4 was downloading Node 20 from GitHub (~5 min) instead of
using the runner's pre-installed copy. The Forgejo runner also has no
cache service backend (ETIMEDOUT on save/restore), so the cache: npm
integration provided no benefit and only added overhead.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 21:03:56 -07:00
Chris Parsons
2c4575c693 Optimize CI build pipeline and harden .npmrc handling
Some checks failed
🚀 Deploy / 🧪 Test (pull_request) Successful in 11m40s
🚀 Deploy / ʦ TypeScript (pull_request) Successful in 10m35s
🚀 Deploy / 🐳 Build (pull_request) Has been cancelled
🚀 Deploy / 🚀 Deploy (pull_request) Has been cancelled
🚀 Deploy / 🔍 Lint (pull_request) Has been cancelled
- Fix Dockerfile dev-deps layer cache invalidation: copy only package manifests
  before npm ci so the layer is reused on code-only commits
- Skip QEMU by pinning platforms: linux/amd64 in build-push-action (~4 min saving)
- Replace manual actions/cache blocks with actions/setup-node cache: npm in
  test/typecheck/lint jobs (removes 3 duplicate 8-line blocks, pins Node 20)
- Pass .npmrc as a Docker BuildKit secret (--mount=type=secret) instead of
  COPYing it, so it can never leak into registry build-cache layers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 20:40:35 -07:00