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