| # syntax=docker/dockerfile:1 | |
| ARG GO_VERSION=1.26.10 | |
| # ALPINE_VERSION sets the version of the alpine base image to use, including for the golang image. | |
| # It must be a supported tag in the docker.io/library/alpine image repository | |
| # that's also available as alpine image variant for the Golang version used. | |
| ARG ALPINE_VERSION=3.23 | |
| ARG MODOUTDATED_VERSION=v0.8.0 | |
| FROM golang:${GO_VERSION}-alpine${ALPINE_VERSION} AS base | |
| ENV GOTOOLCHAIN=local | |
| RUN apk add --no-cache bash git rsync | |
| WORKDIR /src | |
| FROM base AS vendored | |
| ENV GOPROXY=https://proxy.golang.org|direct | |
| RUN --mount=target=/context \ | |
| --mount=target=.,type=tmpfs \ | |
| --mount=target=/go/pkg/mod,type=cache <<EOT | |
| set -e | |
| rsync -a /context/. . | |
| ./scripts/with-go-mod.sh ./scripts/vendor update | |
| mkdir /out | |
| cp -r vendor.mod vendor.sum vendor /out | |
| EOT | |
| FROM scratch AS update | |
| COPY --from=vendored /out /out | |
| FROM vendored AS validate | |
| RUN --mount=target=/context \ | |
| --mount=target=.,type=tmpfs <<EOT | |
| set -e | |
| rsync -a /context/. . | |
| git add -A | |
| rm -rf vendor | |
| cp -rf /out/* . | |
| ./scripts/with-go-mod.sh ./scripts/vendor validate | |
| EOT | |
| FROM psampaz/go-mod-outdated:${MODOUTDATED_VERSION} AS go-mod-outdated | |
| FROM base AS outdated | |
| RUN --mount=target=.,rw \ | |
| --mount=target=/go/pkg/mod,type=cache \ | |
| --mount=from=go-mod-outdated,source=/home/go-mod-outdated,target=/usr/bin/go-mod-outdated \ | |
| ./scripts/with-go-mod.sh ./scripts/vendor outdated |