Skip to content

Commit 874bb14

Browse files
committed
hack: golangci build from source support
Signed-off-by: CrazyMax <[email protected]>
1 parent c398e2a commit 874bb14

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

hack/dockerfiles/lint.Dockerfile

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,36 @@ ARG GO_VERSION=1.23
44
ARG ALPINE_VERSION=3.21
55
ARG XX_VERSION=1.6.1
66

7-
ARG GOLANGCI_LINT_VERSION=1.62.0
7+
ARG GOLANGCI_LINT_VERSION=v1.62.0
8+
ARG GOLANGCI_FROM_SOURCE=false
89
# v0.31 requires go1.24
910
ARG GOPLS_VERSION=v0.30.0
1011
# disabled: deprecated unusedvariable simplifyrange
1112
ARG GOPLS_ANALYZERS="embeddirective fillreturns hostport infertypeargs modernize nonewvars noresultvalues simplifycompositelit simplifyslice unusedparams yield"
1213

1314
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
1415

15-
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS golang-base
16+
FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base
1617
RUN apk add --no-cache git gcc musl-dev
1718

18-
FROM golang-base AS lint-base
19+
FROM base AS golangci-build
20+
WORKDIR /src
21+
ARG GOLANGCI_LINT_VERSION
22+
ADD https://github.com/golangci/golangci-lint.git#${GOLANGCI_LINT_VERSION} .
23+
RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache/ go mod download
24+
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
25+
26+
FROM scratch AS golangci-binary-false
27+
FROM scratch AS golangci-binary-true
28+
COPY --from=golangci-build /out/golangci-lint golangci-lint
29+
FROM golangci-binary-${GOLANGCI_FROM_SOURCE} AS golangci-binary
30+
31+
FROM base AS lint-base
1932
ENV GOFLAGS="-buildvcs=false"
2033
ARG GOLANGCI_LINT_VERSION
21-
RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v${GOLANGCI_LINT_VERSION}
34+
ARG GOLANGCI_FROM_SOURCE
35+
COPY --link --from=golangci-binary / /usr/bin/
36+
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}
2237
COPY --link --from=xx / /
2338
WORKDIR /go/src/github.com/docker/buildx
2439
ARG TARGETPLATFORM
@@ -33,7 +48,7 @@ FROM lint-base AS validate-golangci
3348
RUN --mount=target=/go/src/github.com/docker/buildx \
3449
golangci-lint config verify
3550

36-
FROM golang-base AS gopls
51+
FROM base AS gopls
3752
RUN apk add --no-cache git
3853
ARG GOPLS_VERSION
3954
WORKDIR /src
@@ -61,7 +76,7 @@ eot
6176
done
6277
EOF
6378

64-
FROM golang-base AS gopls-analyze
79+
FROM base AS gopls-analyze
6580
COPY --link --from=xx / /
6681
ARG GOPLS_ANALYZERS
6782
ARG TARGETNAME

0 commit comments

Comments
 (0)