From 996875ae29a669ee3a50f9be387cd3d979ff739f Mon Sep 17 00:00:00 2001 From: clawbot Date: Sun, 15 Mar 2026 10:54:13 -0700 Subject: [PATCH] split Dockerfile into dedicated lint stage for faster CI Use the golangci/golangci-lint image directly as a lint stage that runs fmt-check and lint, rather than copying the binary into the builder stage. BuildKit runs lint and test stages in parallel, so formatting and lint failures surface much faster. The COPY --from=lint dependency ensures BuildKit always executes the lint stage (without it, unused stages are silently skipped). Also add lint to the Makefile check target prereqs to match REPO_POLICIES (check: test lint fmt-check). --- Dockerfile | 30 +++++++++++++++++++++++++----- Makefile | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9a816e2..e6dd403 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,36 @@ +# Lint stage — fast feedback on formatting and lint issues # golangci/golangci-lint:v2.0.2 (2026-03-14) -FROM golangci/golangci-lint@sha256:d55581f7797e7a0877a7c3aaa399b01bdc57d2874d6412601a046cc4062cb62e AS lint-bin +FROM golangci/golangci-lint@sha256:d55581f7797e7a0877a7c3aaa399b01bdc57d2874d6412601a046cc4062cb62e AS lint -# golang:1.23 (2026-03-14) -FROM golang@sha256:60deed95d3888cc5e4d9ff8a10c54e5edc008c6ae3fba6187be6fb592e19e8c0 AS builder -COPY --from=lint-bin /usr/bin/golangci-lint /usr/local/bin/golangci-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 check + +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 diff --git a/Makefile b/Makefile index 89ad942..cab3f5b 100644 --- a/Makefile +++ b/Makefile @@ -32,7 +32,7 @@ $(PROTOC_GEN_GO): fixme: @grep -nir fixme . | grep -v Makefile -check: test fmt-check +check: test lint fmt-check fmt-check: mfer/mf.pb.go sh -c 'test -z "$$(gofmt -l .)"'