################################################################################ # Lint stage — fast feedback on formatting and lint issues ################################################################################ # golangci/golangci-lint:v1.64.8 FROM golangci/golangci-lint@sha256:2987913e27f4eca9c8a39129d2c7bc1e74fbcf77f181e01cea607be437aa5cb8 AS lint WORKDIR /src COPY go.mod go.sum ./ RUN go mod download COPY . . RUN make fmt-check RUN make lint ################################################################################ # Build stage — tests and compilation ################################################################################ # golang:1.24-alpine FROM golang@sha256:8bee1901f1e530bfb4a7850aa7a479d17ae3a18beb6e09064ed54cfd245b7191 AS builder # Force BuildKit to run the lint stage by creating a stage dependency COPY --from=lint /src/go.sum /dev/null RUN apk add --no-cache git make zstd WORKDIR /build COPY go.mod go.sum ./ RUN go mod download COPY . . RUN make test RUN make build # Archive source for posterity RUN go mod vendor && tar -c . | zstd -T0 -19 -o /src.tzst ################################################################################ # Final image ################################################################################ FROM scratch # we put all the source into the final image for posterity, it's small COPY --from=builder /src.tzst /src.tzst COPY --from=builder /build/bin/mfer /mfer ENTRYPOINT ["/mfer"]