# syntax=docker/dockerfile:1.7 FROM golang:1.22-bookworm AS build ARG TARGETOS=linux ARG TARGETARCH=arm64 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 FROM debian:bookworm-slim AS runtime-base RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates e2fsprogs 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 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"]