mesh/merge-gate pass: builds build-agent, gitea, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did witho…
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery delivered
Every merge to the controller's repository rebuilt the route proxy and the build seat's holder, because their builds read that repository whole. Named, the build seat hands each only its program's build source and the planner moves each only when that changes. A rename was said under its new name alone, so a file moved out of a build source changed nothing the planner could see.
27 lines
1.4 KiB
Docker
27 lines
1.4 KiB
Docker
ARG GO_BASE
|
|
ARG ALPINE_BASE
|
|
# build-agent's image: the build machine itself, compiled into a container (novox/hq ADR 0190).
|
|
#
|
|
# **The source is not vendored here.** builder's actual code — cmd/mesh-builder, internal/builder,
|
|
# internal/catalogue — lives in the mesh-controller repository, the same control plane it is one
|
|
# half of. This module ships the packaging, not a second copy of the source, so the build context
|
|
# is the mesh-controller repository (declared under build.artifacts[].context), and this
|
|
# Dockerfile compiles ./cmd/mesh-builder from it — the same shape route-proxy already uses for the
|
|
# same reason. The build seat hands it only that program's build source (novox/hq ADR 0267, the
|
|
# artifact's `compiles`): a merge elsewhere in that repository does not move this image.
|
|
FROM ${GO_BASE} AS build
|
|
WORKDIR /src
|
|
COPY go.mod go.sum ./
|
|
RUN go mod download
|
|
COPY . .
|
|
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -o /mesh-builder ./cmd/mesh-builder
|
|
|
|
# Unlike mesh-controller's own FROM scratch (ADR 0006: nothing to audit but one binary), the build
|
|
# machine's whole job is shelling out to git and docker — it needs a real userland to do that in,
|
|
# not a second copy of either tool vendored into this image. apk installs both from the base's own
|
|
# packages, not fetched on its own at build time.
|
|
FROM ${ALPINE_BASE}
|
|
RUN apk add --no-cache docker-cli git
|
|
COPY --from=build /mesh-builder /usr/local/bin/mesh-builder
|
|
ENTRYPOINT ["/usr/local/bin/mesh-builder"]
|