# 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 golangci-lint run RUN sh -c 'test -z "$(gofmt -l .)"' # Test stage — run tests # golang:1.22 FROM golang@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 AS test WORKDIR /src # Force BuildKit to run the lint stage by creating a stage dependency COPY --from=lint /src/go.sum /dev/null COPY go.mod go.sum ./ RUN go mod download COPY . . RUN go test -v ./... # Final stage: Combine the linting and testing stages # golang:1.22 FROM golang@sha256:1cf6c45ba39db9fd6db16922041d074a63c935556a05c5ccb62d181034df7f02 AS final WORKDIR /app COPY --from=test /src/go.mod ./ CMD ["echo", "Build and tests passed successfully!"]