github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/hack/dockerfiles/lint.Dockerfile (about) 1 # syntax=docker/dockerfile:1 2 3 ARG GO_VERSION=1.21 4 ARG XX_VERSION=1.3.0 5 ARG GOLANGCI_LINT_VERSION=1.57.2 6 ARG GOPLS_VERSION=v0.20.0 7 # disabled: deprecated unusedvariable simplifyrange 8 ARG GOPLS_ANALYZERS="embeddirective fillreturns infertypeargs nonewvars noresultvalues simplifycompositelit simplifyslice stubmethods undeclaredname unusedparams useany" 9 10 11 FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx 12 13 FROM --platform=$BUILDPLATFORM golang:${GO_VERSION}-alpine AS golang-base 14 RUN apk add --no-cache git gcc musl-dev 15 16 FROM golang-base AS lint 17 ENV GOFLAGS="-buildvcs=false" 18 ARG GOLANGCI_LINT_VERSION 19 RUN wget -O- -nv https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s v${GOLANGCI_LINT_VERSION} 20 COPY --link --from=xx / / 21 WORKDIR /go/src/github.com/docker/buildx 22 ARG TARGETPLATFORM 23 RUN --mount=target=/go/src/github.com/docker/buildx \ 24 --mount=target=/root/.cache,type=cache,id=lint-cache-$TARGETPLATFORM \ 25 xx-go --wrap && \ 26 golangci-lint run 27 28 FROM golang-base AS gopls 29 RUN apk add --no-cache git 30 ARG GOPLS_VERSION 31 WORKDIR /src 32 RUN git clone https://github.com/golang/tools.git && \ 33 cd tools && git checkout ${GOPLS_VERSION} 34 WORKDIR tools/gopls 35 ARG GOPLS_ANALYZERS 36 RUN <<'EOF' 37 set -ex 38 mkdir -p /out 39 for analyzer in ${GOPLS_ANALYZERS}; do 40 mkdir -p internal/cmd/$analyzer 41 cat <<eot > internal/cmd/$analyzer/main.go 42 package main 43 44 import ( 45 "golang.org/x/tools/go/analysis/singlechecker" 46 analyzer "golang.org/x/tools/gopls/internal/analysis/$analyzer" 47 ) 48 49 func main() { singlechecker.Main(analyzer.Analyzer) } 50 eot 51 echo "Analyzing with ${analyzer}..." 52 go build -o /out/$analyzer ./internal/cmd/$analyzer 53 done 54 EOF 55 56 FROM golang-base AS gopls-analyze 57 COPY --link --from=xx / / 58 ARG GOPLS_ANALYZERS 59 ARG TARGETNAME 60 ARG TARGETPLATFORM 61 WORKDIR /go/src/github.com/docker/buildx 62 RUN --mount=target=. \ 63 --mount=target=/root/.cache,type=cache,id=lint-cache-${TARGETNAME}-${TARGETPLATFORM} \ 64 --mount=target=/gopls-analyzers,from=gopls,source=/out <<EOF 65 set -ex 66 xx-go --wrap 67 for analyzer in ${GOPLS_ANALYZERS}; do 68 go vet -vettool=/gopls-analyzers/$analyzer ./... 69 done 70 EOF 71 72 FROM lint