Docker-Images/ci/frontend-builder/README.md

3.0 KiB

Frontend Builder — CI Image

Pre-baked build environment for KollectAI-ETL frontend (SvelteKit) CI jobs and protobuf TypeScript code generation.

What's included

  • Node.js 24 (node:24-bookworm-slim)
  • pnpm 11 (via corepack)
  • buf CLI — for buf lint and buf generate
  • @bufbuild/protoc-gen-es — installed globally so buf v2 local: protoc-gen-es resolves via PATH (no BSR remote-plugin calls)
  • Playwright chromium runtime libraries pre-installed (libnss3, libgbm1, libasound2, etc.)
  • Playwright + chromium browser binary prebaked at /ms-playwright (PLAYWRIGHT_BROWSERS_PATH=/ms-playwright) — CI's pnpm exec playwright install chromium finds the prebaked binary and skips the ~170MB download every run. Pin must match frontend/svelte/package.json's @playwright/test version
  • ORAS CLI — for uploading test reports / audit artifacts to Harbor
  • git, jq, curl, unzip

Build

docker build -t kcr.kollect.biz/kollect-tools/ci/frontend-builder:latest ci/frontend-builder/
docker push kcr.kollect.biz/kollect-tools/ci/frontend-builder:latest

Build args

Arg Default Description
NODE_MAJOR 24 Node.js major version (matches Node base image)
PNPM_VERSION 11.0.1 pnpm version (corepack-activated)
BUF_VERSION 1.69.0 buf CLI version
PROTOC_GEN_ES_VERSION 2.12.0 @bufbuild/protoc-gen-es version (ad-hoc use only — KollectAI-ETL CI uses the version pinned in proto/pnpm-lock.yaml)
PLAYWRIGHT_VERSION 1.59.1 Playwright version. Must match frontend/svelte/package.json @playwright/test; mismatch causes runtime browser re-download
ORAS_VERSION 1.3.2 ORAS CLI version

Usage in CI

jobs:
  test-unit:
    runs-on: ubuntu-latest
    container:
      image: kcr.kollect.biz/kollect-tools/ci/frontend-builder:latest
    steps:
      - uses: actions/checkout@v6
      - run: pnpm install --frozen-lockfile
        working-directory: frontend/svelte
      - run: pnpm test
        working-directory: frontend/svelte

For protobuf TS codegen (buf.gen.yaml declares local: protoc-gen-es):

- name: Generate proto TS bindings
  working-directory: proto
  run: buf generate

For Playwright E2E — the chromium binary is prebaked, so CI doesn't need to install it. Just run the tests directly:

- name: E2E tests
  working-directory: frontend/svelte
  run: pnpm test:e2e

If a CI step does run pnpm exec playwright install chromium, it'll detect the prebaked binary at $PLAYWRIGHT_BROWSERS_PATH and exit immediately (no download). System libs are pre-installed, so --with-deps is also unnecessary.

Maintenance

Rebuild on dependency bumps:

  • New Node major → bump NODE_MAJOR, push image
  • pnpm bump → bump PNPM_VERSION, push image
  • buf protocol changes → bump BUF_VERSION and PROTOC_GEN_ES_VERSION, push image

The CI workflow's weekly schedule rebuilds the image to keep base layers patched.