From 874bb14de9ac96188e07c66ea7987495d7751183 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Tue, 13 May 2025 16:19:50 +0200 Subject: [PATCH] hack: golangci build from source support Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com> --- hack/dockerfiles/lint.Dockerfile | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/hack/dockerfiles/lint.Dockerfile b/hack/dockerfiles/lint.Dockerfile index 37c64ac69..b94657be9 100644 --- a/hack/dockerfiles/lint.Dockerfile +++ b/hack/dockerfiles/lint.Dockerfile @@ -4,7 +4,8 @@ ARG GO_VERSION=1.23 ARG ALPINE_VERSION=3.21 ARG XX_VERSION=1.6.1 -ARG GOLANGCI_LINT_VERSION=1.62.0 +ARG GOLANGCI_LINT_VERSION=v1.62.0 +ARG GOLANGCI_FROM_SOURCE=false # v0.31 requires go1.24 ARG GOPLS_VERSION=v0.30.0 # disabled: deprecated unusedvariable simplifyrange @@ -12,13 +13,27 @@ ARG GOPLS_ANALYZERS="embeddirective fillreturns hostport infertypeargs modernize FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx -FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS golang-base +FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base RUN apk add --no-cache git gcc musl-dev -FROM golang-base AS lint-base +FROM base AS golangci-build +WORKDIR /src +ARG GOLANGCI_LINT_VERSION +ADD https://github.com/golangci/golangci-lint.git#${GOLANGCI_LINT_VERSION} . +RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/ go mod download +RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/ mkdir -p out && go build -o /out/golangci-lint ./cmd/golangci-lint + +FROM scratch AS golangci-binary-false +FROM scratch AS golangci-binary-true +COPY --from=golangci-build /out/golangci-lint golangci-lint +FROM golangci-binary-${GOLANGCI_FROM_SOURCE} AS golangci-binary + +FROM base AS lint-base ENV GOFLAGS="-buildvcs=false" ARG GOLANGCI_LINT_VERSION -RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v${GOLANGCI_LINT_VERSION} +ARG GOLANGCI_FROM_SOURCE +COPY --link --from=golangci-binary / /usr/bin/ +RUN [ "${GOLANGCI_FROM_SOURCE}" = "true" ] && exit 0; wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s ${GOLANGCI_LINT_VERSION} COPY --link --from=xx / / WORKDIR /go/src/github.com/docker/buildx ARG TARGETPLATFORM @@ -33,7 +48,7 @@ FROM lint-base AS validate-golangci RUN --mount=target=/go/src/github.com/docker/buildx \ golangci-lint config verify -FROM golang-base AS gopls +FROM base AS gopls RUN apk add --no-cache git ARG GOPLS_VERSION WORKDIR /src @@ -61,7 +76,7 @@ eot done EOF -FROM golang-base AS gopls-analyze +FROM base AS gopls-analyze COPY --link --from=xx / / ARG GOPLS_ANALYZERS ARG TARGETNAME