github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/hack/dockerfiles/vendor.Dockerfile (about)

     1  # syntax=docker/dockerfile:1
     2  
     3  ARG GO_VERSION=1.21
     4  ARG MODOUTDATED_VERSION=v0.8.0
     5  
     6  FROM golang:${GO_VERSION}-alpine AS base
     7  RUN apk add --no-cache git rsync
     8  WORKDIR /src
     9  
    10  FROM base AS vendored
    11  RUN --mount=target=/context \
    12    --mount=target=.,type=tmpfs  \
    13    --mount=target=/go/pkg/mod,type=cache <<EOT
    14  set -e
    15  rsync -a /context/. .
    16  go mod tidy
    17  go mod vendor
    18  mkdir /out
    19  cp -r go.mod go.sum vendor /out
    20  EOT
    21  
    22  FROM scratch AS update
    23  COPY --from=vendored /out /out
    24  
    25  FROM vendored AS validate
    26  RUN --mount=target=/context \
    27    --mount=target=.,type=tmpfs <<EOT
    28  set -e
    29  rsync -a /context/. .
    30  git add -A
    31  rm -rf vendor
    32  cp -rf /out/* .
    33  if [ -n "$(git status --porcelain -- go.mod go.sum vendor)" ]; then
    34    echo >&2 'ERROR: Vendor result differs. Please vendor your package with "make vendor"'
    35    git status --porcelain -- go.mod go.sum vendor
    36    exit 1
    37  fi
    38  EOT
    39  
    40  FROM psampaz/go-mod-outdated:${MODOUTDATED_VERSION} AS go-mod-outdated
    41  FROM base AS outdated
    42  RUN --mount=target=.,ro \
    43    --mount=target=/go/pkg/mod,type=cache \
    44    --mount=from=go-mod-outdated,source=/home/go-mod-outdated,target=/usr/bin/go-mod-outdated \
    45    go list -mod=readonly -u -m -json all | go-mod-outdated -update -direct