# Lint stage — fast feedback on formatting and lint issues
# golangci/golangci-lint:v2.12.2 (Debian-based), 2026-08-07
FROM golangci/golangci-lint:v2.12.2@sha256:5cceeef04e53efe1470638d4b4b4f5ceefd574955ab3941b2d9a68a8c9ad5240 AS lint

WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download

COPY . .

# Touch .pb.go so make does not try to regenerate via protoc (file is committed)
RUN touch mfer/mf.pb.go

RUN make fmt-check
RUN make lint

# Build stage — tests and compilation
# golang:1.23 (2026-03-14)
FROM golang@sha256:60deed95d3888cc5e4d9ff8a10c54e5edc008c6ae3fba6187be6fb592e19e8c0 AS builder

# Force BuildKit to run the lint stage by creating a stage dependency
COPY --from=lint /src/go.sum /dev/null

WORKDIR /src
COPY go.mod go.sum ./
RUN go mod download

COPY . .

# Touch .pb.go so make does not try to regenerate via protoc (file is committed)
RUN touch mfer/mf.pb.go

RUN make test
RUN cd cmd/mfer && go build -tags urfave_cli_no_docs -o /mfer .

FROM scratch
COPY --from=builder /mfer /mfer
ENTRYPOINT ["/mfer"]
