# syntax=docker/dockerfile:1.7 ARG TARGETPLATFORM ARG TARGETOS ARG TARGETARCH FROM --platform=$BUILDPLATFORM golang:1.23-bookworm AS build ARG TARGETOS ARG TARGETARCH WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN --mount=type=cache,target=/root/.cache/go-build \ --mount=type=cache,target=/go/pkg/mod \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/metis ./cmd/metis && \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/metis-sentinel ./cmd/metis-sentinel && \ CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /out/oras oras.land/oras/cmd/oras FROM debian:bookworm-slim AS runtime-base RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates e2fsprogs fdisk util-linux openssh-client xz-utils \ && rm -rf /var/lib/apt/lists/* WORKDIR /app COPY --from=build /out/metis /usr/local/bin/metis COPY --from=build /out/metis-sentinel /usr/local/bin/metis-sentinel COPY --from=build /out/oras /usr/local/bin/oras COPY inventory.example.yaml /app/inventory.example.yaml COPY inventory.titan-rpi4.yaml /app/inventory.titan-rpi4.yaml COPY overlays /app/overlays FROM runtime-base AS runtime EXPOSE 8080 ENTRYPOINT ["metis"] CMD ["serve"] FROM debian:bookworm-slim AS sentinel RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates util-linux \ && rm -rf /var/lib/apt/lists/* COPY --from=build /out/metis-sentinel /usr/local/bin/metis-sentinel ENTRYPOINT ["metis-sentinel"]