hack: golangci build from source support

Signed-off-by: CrazyMax <1951866+crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2025-05-13 16:20:35 +02:00
parent c398e2a224
commit 874bb14de9
+21 -6
View File
@@ -4,7 +4,8 @@ ARG GO_VERSION=1.23
ARG ALPINE_VERSION=3.21 ARG ALPINE_VERSION=3.21
ARG XX_VERSION=1.6.1 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 # v0.31 requires go1.24
ARG GOPLS_VERSION=v0.30.0 ARG GOPLS_VERSION=v0.30.0
# disabled: deprecated unusedvariable simplifyrange # 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 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 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" ENV GOFLAGS="-buildvcs=false"
ARG GOLANGCI_LINT_VERSION 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 / / COPY --link --from=xx / /
WORKDIR /go/src/github.com/docker/buildx WORKDIR /go/src/github.com/docker/buildx
ARG TARGETPLATFORM ARG TARGETPLATFORM
@@ -33,7 +48,7 @@ FROM lint-base AS validate-golangci
RUN --mount=target=/go/src/github.com/docker/buildx \ RUN --mount=target=/go/src/github.com/docker/buildx \
golangci-lint config verify golangci-lint config verify
FROM golang-base AS gopls FROM base AS gopls
RUN apk add --no-cache git RUN apk add --no-cache git
ARG GOPLS_VERSION ARG GOPLS_VERSION
WORKDIR /src WORKDIR /src
@@ -61,7 +76,7 @@ eot
done done
EOF EOF
FROM golang-base AS gopls-analyze FROM base AS gopls-analyze
COPY --link --from=xx / / COPY --link --from=xx / /
ARG GOPLS_ANALYZERS ARG GOPLS_ANALYZERS
ARG TARGETNAME ARG TARGETNAME