# syntax=docker/dockerfile:1.7 ARG GO_BUILD_IMAGE=docker.io/library/golang:1.25-bookworm@sha256:6359592445455f2dbe2412bed411336035bc019a50017720d77454ffdd6d0f82 ARG WORKER_RUNTIME_IMAGE=public.ecr.aws/n4e0e1y0/beta9-worker@sha256:5792f3b5c2ce00e37165db3ed1f1d39b245da6ec922a3cf688f437280cae0308 # Built from docker/Dockerfile.microvm; CI checks this matches hack/microvm-image-tag.sh. ARG MICROVM_IMAGE=public.ecr.aws/n4e0e1y0/beta9-microvm:d22ea0c29c1c # MICROVM_DEV=1 also compiles the microvm integration test binary into the # image so hack/microvm-smoke.sh can run it in place with the worker's PATH. ARG MICROVM_DEV=0 FROM --platform=$BUILDPLATFORM ${GO_BUILD_IMAGE} AS binaries ARG TARGETOS ARG TARGETARCH ARG MICROVM_DEV ENV GONOSUMDB="github.com/beam-cloud/*" WORKDIR /workspace COPY go.mod go.sum ./ RUN --mount=type=cache,target=/go/pkg/mod go mod download COPY cmd/ ./cmd/ COPY pkg/ ./pkg/ COPY proto/ ./proto/ RUN --mount=type=cache,target=/go/pkg/mod \ --mount=type=cache,target=/root/.cache/go-build \ mkdir -p /out && \ CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \ go build -trimpath -o /out/worker ./cmd/worker/main.go && \ CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \ go build -trimpath -gcflags="all=-N -l" -gcflags="gvisor.dev/gvisor/pkg/cpuid=" -o /out/worker-debug ./cmd/worker/main.go && \ CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \ go build -trimpath -o /out/agent ./cmd/agent && \ ln /out/agent /out/beam-agent && \ CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \ go build -trimpath -ldflags="-s -w" -o /out/beam-vminit ./cmd/vminit && \ if [ "$MICROVM_DEV" = "1" ]; then \ CGO_ENABLED=0 GOOS="$TARGETOS" GOARCH="$TARGETARCH" \ go test -c -tags microvm -o /out/microvm.test ./pkg/runtime; \ fi FROM ${MICROVM_IMAGE} AS microvm FROM --platform=$TARGETPLATFORM ${WORKER_RUNTIME_IMAGE} ARG TARGETARCH ARG GOPROC_VERSION=0.1.18 ARG SOURCE_REVISION ARG SOURCE_HASH LABEL org.opencontainers.image.revision="$SOURCE_REVISION" \ dev.beam.source-hash="$SOURCE_HASH" COPY docker/goproc.sha256 /tmp/goproc.sha256 RUN cd /tmp && \ wget "https://github.com/beam-cloud/goproc/releases/download/v${GOPROC_VERSION}/goproc-${GOPROC_VERSION}-linux-${TARGETARCH}" && \ sha256sum --check --ignore-missing goproc.sha256 && \ install -m 0755 "goproc-${GOPROC_VERSION}-linux-${TARGETARCH}" /usr/local/bin/goproc && \ rm goproc.sha256 "goproc-${GOPROC_VERSION}-linux-${TARGETARCH}" COPY --link --from=binaries /out/ /usr/local/bin/ COPY --link --from=microvm /microvm/bin/ /usr/local/bin/ COPY --link --from=microvm /microvm/share/ /usr/local/share/beam/microvm/