github.com/rish1988/moby@v25.0.2+incompatible/hack/dockerfiles/generate-files.Dockerfile (about) 1 # syntax=docker/dockerfile:1 2 3 ARG GO_VERSION=1.21.6 4 ARG BASE_DEBIAN_DISTRO="bookworm" 5 ARG PROTOC_VERSION=3.11.4 6 7 # protoc is dynamically linked to glibc so can't use alpine base 8 FROM golang:${GO_VERSION}-${BASE_DEBIAN_DISTRO} AS base 9 RUN apt-get update && apt-get --no-install-recommends install -y git unzip 10 ARG PROTOC_VERSION 11 ARG TARGETOS 12 ARG TARGETARCH 13 ENV GOTOOLCHAIN=local 14 RUN <<EOT 15 set -e 16 arch=$(echo $TARGETARCH | sed -e s/amd64/x86_64/ -e s/arm64/aarch_64/) 17 wget -q https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip 18 unzip protoc-${PROTOC_VERSION}-${TARGETOS}-${arch}.zip -d /usr/local 19 EOT 20 WORKDIR /go/src/github.com/docker/docker 21 22 FROM base AS src 23 WORKDIR /out 24 COPY . . 25 RUN <<EOT 26 set -ex 27 git config --global user.email "moby@example.com" 28 git config --global user.name "moby" 29 git init . 30 git add . 31 git commit -m 'init' 32 EOT 33 34 FROM base AS tools 35 RUN --mount=from=src,source=/out,target=.,rw \ 36 --mount=type=cache,target=/root/.cache/go-build <<EOT 37 set -ex 38 ./hack/with-go-mod.sh go install -v -mod=vendor -modfile=vendor.mod \ 39 github.com/gogo/protobuf/protoc-gen-gogo \ 40 github.com/gogo/protobuf/protoc-gen-gogofaster \ 41 github.com/gogo/protobuf/protoc-gen-gogoslick \ 42 github.com/golang/protobuf/protoc-gen-go 43 ./hack/with-go-mod.sh go build -v -mod=vendor -modfile=vendor.mod \ 44 -o /usr/bin/pluginrpc-gen \ 45 ./pkg/plugins/pluginrpc-gen 46 EOT 47 48 FROM tools AS generated 49 ENV GO111MODULE=off 50 RUN --mount=from=src,source=/out,target=.,rw <<EOT 51 set -ex 52 go generate -v ./... 53 mkdir /out 54 git ls-files -m --others -- ':!vendor' 'profiles/seccomp/default.json' '**/*.pb.go' | tar -cf - --files-from - | tar -C /out -xf - 55 EOT 56 57 FROM scratch AS update 58 COPY --from=generated /out / 59 60 FROM base AS validate 61 RUN --mount=from=src,source=/out,target=.,rw \ 62 --mount=type=bind,from=generated,source=/out,target=/generated-files <<EOT 63 set -e 64 git add -A 65 if [ "$(ls -A /generated-files)" ]; then 66 cp -rf /generated-files/* . 67 fi 68 diff=$(git status --porcelain -- ':!vendor' 'profiles/seccomp/default.json' '**/*.pb.go') 69 if [ -n "$diff" ]; then 70 echo >&2 'ERROR: The result of "go generate" differs. Please update with "make generate-files"' 71 echo "$diff" 72 exit 1 73 fi 74 EOT