Publish Mock Server
Build and publish the mock-server Docker image to ghcr.io/vfarcic/dot-ai-mock-server:latest.
Prerequisites
- Docker is installed and running (use
sudo dockerif your user is not in thedockergroup) - Authenticated to ghcr.io. The simplest path is to reuse the
ghtoken (needswrite:packagesscope):gh auth token | docker login ghcr.io -u vfarcic --password-stdin
Steps
Run all commands from the repository root. The build context is the
mock-server/directory (relative — do NOT hardcode an absolute path).
Set up a multi-arch builder (one-time per machine)
The default
dockerdriver cannot push a multi-platform manifest, and buildingarm64on anamd64host needs QEMU. Register the emulator and create a container-driver builder:docker run --privileged --rm tonistiigi/binfmt --install arm64 docker buildx create --name mockbuilder --driver docker-container --use --bootstrapBuild and push multi-arch Docker image
Tag both
latestand the current dot-ai release version (so downstream repos can pin to a contract version instead of a digest). Derive the version from the rootpackage.json:VERSION=$(node -p "require('./package.json').version") docker buildx build --builder mockbuilder \ --platform linux/amd64,linux/arm64 \ -t ghcr.io/vfarcic/dot-ai-mock-server:latest \ -t ghcr.io/vfarcic/dot-ai-mock-server:$VERSION \ --push mock-serverVerify the push
Confirm both tags resolve to the same digest and carry both platforms:
docker buildx imagetools inspect ghcr.io/vfarcic/dot-ai-mock-server:latestNote the manifest-list digest (
sha256:…) — downstream repos pin to it.
Usage
After publishing, consumers (like dot-ai-ui) can use:
services:
mock-api:
image: ghcr.io/vfarcic/dot-ai-mock-server:latest
ports:
- "3001:3001"
When to Publish
Run this skill when:
- Fixtures are added or modified in
mock-server/fixtures/ - Mock server code changes (
server.ts,routes.ts) - API schemas change that affect mock responses
Notes
- Publishes
latestplus an immutable version tag matching the dot-ai release (e.g.1.22.0).latestis mutable; downstream repos should pin to the version tag or the digest for reproducible tests. - Publishing is manual (not wired into CI/release), so re-run this skill after merging any change that affects the mock contract — cutting a dot-ai release does NOT rebuild the image.
- Image is ~230MB (Node.js alpine + fixtures)