From 95b1a0e4571c2ed0ef1d9b58a7d7af3a0722323e Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Fri, 29 Oct 2021 05:49:59 +0900 Subject: [PATCH 1/6] cloudbuild: remove --allow=network.host and --network=host Signed-off-by: Koichi Shiraishi --- cloudbuild.yaml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 9b1a8b8..d8056e0 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -23,8 +23,6 @@ steps: - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --allow=network.host - - --network=host - . waitFor: ["docker"] @@ -39,8 +37,6 @@ steps: - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION},push=false - - --allow=network.host - - --network=host - . waitFor: - "protoc-builder" @@ -56,8 +52,6 @@ steps: - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug,push=false - - --allow=network.host - - --network=host - . waitFor: - "protoc-builder" @@ -74,8 +68,6 @@ steps: - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --allow=network.host - - --network=host - . waitFor: - "protoc" @@ -95,8 +87,6 @@ steps: - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION} - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION} - - --allow=network.host - - --network=host - . waitFor: - "golang-builder" @@ -115,8 +105,6 @@ steps: - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-debug - - --allow=network.host - - --network=host - . waitFor: - "golang-builder" From c13c23c5e51d894dc32410d9f93dc27b9c1334f2 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Fri, 29 Oct 2021 07:09:08 +0900 Subject: [PATCH 2/6] Dockerfile: add musl-dev Signed-off-by: Koichi Shiraishi --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 31a77d2..7698994 100644 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,8 @@ ENV \ RUN set -eux && \ apk add --no-cache \ build-base \ - git + git \ + musl-dev ARG PROTOC_GEN_GO_VERSION RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache \ set -eux && \ From 789ef310b85b15276ad15d8f89b48c5a780cbdfc Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Fri, 29 Oct 2021 07:10:56 +0900 Subject: [PATCH 3/6] cloudbuild: use docker-container driver to buildx Signed-off-by: Koichi Shiraishi --- cloudbuild.yaml | 56 +++++++++++++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/cloudbuild.yaml b/cloudbuild.yaml index d8056e0..d35c415 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -1,5 +1,5 @@ steps: - - id: docker + - id: docker_buildx name: docker:20.10 args: - build @@ -11,7 +11,22 @@ steps: - hack/dockerfiles env: - "DOCKER_BUILDKIT=1" - waitFor: ["-"] + waitFor: + - "-" + + - id: bootstrap_buildx + name: docker-buildx:cloudbuild + args: + - buildx + - create + - --bootstrap + - --name=cloudbuild + - --driver=docker-container + - --driver-opt=image=moby/buildkit:nightly + - --driver-opt=network=cloudbuild + - --use + waitFor: + - "docker_buildx" - id: protoc-builder name: docker-buildx:cloudbuild @@ -23,8 +38,11 @@ steps: - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} + - --cache-from=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache,push=true - . - waitFor: ["docker"] + waitFor: + - "bootstrap_buildx" - id: protoc name: docker-buildx:cloudbuild @@ -32,11 +50,11 @@ steps: - buildx - build - --target=protoc - - --build-arg=BUILDKIT_INLINE_CACHE=1 - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION},push=false + - --tag=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION} + - --load - . waitFor: - "protoc-builder" @@ -47,11 +65,11 @@ steps: - buildx - build - --target=protoc-debug - - --build-arg=BUILDKIT_INLINE_CACHE=1 - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug,push=false + - --tag=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug + - --load - . waitFor: - "protoc-builder" @@ -68,6 +86,8 @@ steps: - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} + - --cache-from=type=registry,ref=gcr.io/$PROJECT_ID/protoc/golang-builder:cloudbuild_cache + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/golang-builder:cloudbuild_cache,push=true - . waitFor: - "protoc" @@ -79,14 +99,13 @@ steps: - buildx - build - --target=golang - - --build-arg=BUILDKIT_INLINE_CACHE=1 - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION} + - --tag="gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}" + - --load - . waitFor: - "golang-builder" @@ -97,14 +116,13 @@ steps: - buildx - build - --target=golang-debug - - --build-arg=BUILDKIT_INLINE_CACHE=1 - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-debug + - --tag="gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}-debug" + - --load - . waitFor: - "golang-builder" @@ -118,13 +136,11 @@ substitutions: _PROTOC_GEN_GO_VERSION: "v1.27.1" # https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.27.1 _PROTOC_GEN_GO_GRPC_VERSION: "9c668aeab869" # https://github.com/grpc/grpc-go/tree/9c668aeab869 -images: - - "gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}" - - "gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug" - - "gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}" - - "gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}" - - "gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug" - - "gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-debug" +# images: +# - "gcr.io/$PROJECT_ID/protoc/protoc:${_PR_NUMBER:-${_PROTOC_VERSION}}" +# - "gcr.io/$PROJECT_ID/protoc/protoc:${_PR_NUMBER:-${_PROTOC_VERSION}}-debug" +# - "gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}" +# - "gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}-debug" tags: - "protoc.protoc" From 8a4633f586a09b878dcfebf65b0ef35c38a52f08 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 8 Nov 2021 04:28:48 +0900 Subject: [PATCH 4/6] cloudbuild,buidx: upgrade buildx-bin container to 0.7.0-rc1 Signed-off-by: Koichi Shiraishi --- cloudbuild.yaml | 4 ++-- hack/dockerfiles/buildx.dockerfile | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cloudbuild.yaml b/cloudbuild.yaml index d35c415..90a07b0 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -5,7 +5,7 @@ steps: - build - --target=docker - --build-arg=DOCKER_VERSION=${_DOCKER_VERSION} - - --build-arg=BUILDX_DIGEST=${_BUILDX_DIGEST} + - --build-arg=BUILDX_VERSION=${_BUILDX_VERSION} - --tag=docker-buildx:cloudbuild - --file=hack/dockerfiles/buildx.dockerfile - hack/dockerfiles @@ -129,7 +129,7 @@ steps: substitutions: _DOCKER_VERSION: "20.10" - _BUILDX_DIGEST: "2ec838c5f74e1cdd5e6ea4e789c0c0f5573807550b50b2ddc6deb2c2033a286b" # https://github.com/docker/buildx/tree/084b6c0a95ce, https://github.com/docker/buildx/runs/3947339794 + _BUILDX_VERSION: "0.7.0-rc1" # https://github.com/docker/buildx/releases/tag/v0.7.0-rc1 _PROTOC_VERSION: "3.19.0" # https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.0 _GOLANG_VERSION: "1.17" _ALPINE_VERSION: "3.14" diff --git a/hack/dockerfiles/buildx.dockerfile b/hack/dockerfiles/buildx.dockerfile index ca6fedb..c1cce5e 100644 --- a/hack/dockerfiles/buildx.dockerfile +++ b/hack/dockerfiles/buildx.dockerfile @@ -1,9 +1,9 @@ # syntax=docker/dockerfile:1.3 ARG DOCKER_VERSION -ARG BUILDX_DIGEST +ARG BUILDX_VERSION -FROM --platform=$BUILDPLATFORM docker/buildx-bin@sha256:${BUILDX_DIGEST} AS buildx +FROM --platform=$BUILDPLATFORM docker/buildx-bin:${BUILDX_VERSION} AS buildx FROM --platform=$BUILDPLATFORM docker:${DOCKER_VERSION} AS docker COPY --from=buildx /buildx /usr/libexec/docker/cli-plugins/docker-buildx From 92f7f274d995a2594d12517855339c013162cd14 Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 8 Nov 2021 04:29:20 +0900 Subject: [PATCH 5/6] Dockerfile: extract build-base package Signed-off-by: Koichi Shiraishi --- Dockerfile | 4 +++- cloudbuild.yaml | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7698994..d6b9922 100644 --- a/Dockerfile +++ b/Dockerfile @@ -46,8 +46,10 @@ ENV \ GO111MODULE=on RUN set -eux && \ apk add --no-cache \ - build-base \ + binutils \ + gcc \ git \ + libc-dev \ musl-dev ARG PROTOC_GEN_GO_VERSION RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache \ diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 90a07b0..9889829 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -104,7 +104,7 @@ steps: - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag="gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}" + - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION} - --load - . waitFor: @@ -121,7 +121,7 @@ steps: - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag="gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}-debug" + - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug - --load - . waitFor: From 10dc36a2d759c127dfe74fb70544ff9787a0e57d Mon Sep 17 00:00:00 2001 From: Koichi Shiraishi Date: Mon, 15 Nov 2021 15:44:32 +0900 Subject: [PATCH 6/6] cloudbuild: enable stargz-snapshotter Signed-off-by: Koichi Shiraishi --- Dockerfile | 4 +- cloudbuild.yaml | 200 ++++++++++++++------------- hack/dockerfiles/buildkit.dockerfile | 9 ++ hack/dockerfiles/buildx.dockerfile | 4 + 4 files changed, 121 insertions(+), 96 deletions(-) create mode 100644 hack/dockerfiles/buildkit.dockerfile diff --git a/Dockerfile b/Dockerfile index d6b9922..82a8d3f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -54,12 +54,12 @@ RUN set -eux && \ ARG PROTOC_GEN_GO_VERSION RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache \ set -eux && \ - GOBIN="${OUTDIR}/usr/local/bin" go install -v -tags='osusergo,netgo,static,static_build' -buildmode=pie -ldflags='-s -w -d -linkmode external "-extldflags=-static-pie"' -installsuffix='netgo' \ + GOBIN="${OUTDIR}/usr/local/bin" go install -v -tags='osusergo,netgo,static,static_build' -buildmode=pie -ldflags='-s -w -d -linkmode external -buildid= "-extldflags=-static-pie"' -installsuffix='netgo' \ google.golang.org/protobuf/cmd/protoc-gen-go@${PROTOC_GEN_GO_VERSION} ARG PROTOC_GEN_GO_GRPC_VERSION RUN --mount=type=cache,target=/go/pkg/mod --mount=type=cache,target=/root/.cache \ set -eux && \ - GOBIN="${OUTDIR}/usr/local/bin" go install -v -tags='osusergo,netgo,static,static_build' -buildmode=pie -ldflags='-s -w -d -linkmode external "-extldflags=-static-pie"' -installsuffix='netgo' \ + GOBIN="${OUTDIR}/usr/local/bin" go install -v -tags='osusergo,netgo,static,static_build' -buildmode=pie -ldflags='-s -w -d -linkmode external -buildid= "-extldflags=-static-pie"' -installsuffix='netgo' \ google.golang.org/grpc/cmd/protoc-gen-go-grpc@${PROTOC_GEN_GO_GRPC_VERSION} FROM gcr.io/distroless/base:nonroot AS golang diff --git a/cloudbuild.yaml b/cloudbuild.yaml index 9889829..47dde65 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -1,147 +1,159 @@ steps: - - id: docker_buildx + - id: buildkit name: docker:20.10 + env: + - "DOCKER_BUILDKIT=1" + entrypoint: "docker" args: + - image - build - - --target=docker - --build-arg=DOCKER_VERSION=${_DOCKER_VERSION} - - --build-arg=BUILDX_VERSION=${_BUILDX_VERSION} - - --tag=docker-buildx:cloudbuild - - --file=hack/dockerfiles/buildx.dockerfile - - hack/dockerfiles - env: - - "DOCKER_BUILDKIT=1" + - --build-arg=BUILDKIT_VERSION=${_BUILDKIT_VERSION} + - -t + - buildkit:cloudbuild + - --target=buildkit + - --file=./hack/dockerfiles/buildkit.dockerfile + - ./hack/dockerfiles waitFor: - "-" - - id: bootstrap_buildx - name: docker-buildx:cloudbuild + - id: bootstrap_buildkitd + name: buildkit:cloudbuild + entrypoint: "docker" args: - - buildx - - create - - --bootstrap - - --name=cloudbuild - - --driver=docker-container - - --driver-opt=image=moby/buildkit:nightly - - --driver-opt=network=cloudbuild - - --use + - container + - run + - --detach + - --privileged + - --name=buildkitd + - --network=cloudbuild + - moby/buildkit:${_BUILDKIT_VERSION} waitFor: - - "docker_buildx" + - "buildkit" - id: protoc-builder - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=protoc-builder - - --build-arg=BUILDKIT_INLINE_CACHE=1 - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --cache-from=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache - - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache,push=true - - . + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=protoc-builder + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --export-cache=type=inline + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache waitFor: - - "bootstrap_buildx" + - "bootstrap_buildkitd" - id: protoc - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=protoc - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION} - - --load - - . + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=protoc + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION},push=true,oci-mediatypes=true,compression=estargz + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache waitFor: - "protoc-builder" - id: protoc-debug - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=protoc-debug - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug - - --load - - . + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=protoc-debug + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/protoc:${_PROTOC_VERSION}-debug,push=true,oci-mediatypes=true,compression=estargz + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache waitFor: - "protoc-builder" - id: golang-builder - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=golang-builder - - --build-arg=BUILDKIT_INLINE_CACHE=1 - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --cache-from=type=registry,ref=gcr.io/$PROJECT_ID/protoc/golang-builder:cloudbuild_cache - - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/golang-builder:cloudbuild_cache,push=true - - . - waitFor: - - "protoc" - - "protoc-debug" + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=golang-builder + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} + - --export-cache=type=inline + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache - id: golang - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=golang - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION} - - --load - - . + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=golang + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION},push=true,oci-mediatypes=true,compression=estargz + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/cache/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}:cloudbuild_cache waitFor: + - "protoc" - "golang-builder" - id: golang-debug - name: docker-buildx:cloudbuild + name: buildkit:cloudbuild + entrypoint: "buildctl" args: - - buildx + - --addr=docker-container://buildkitd - build - - --target=golang-debug - - --build-arg=PROTOC_VERSION=${_PROTOC_VERSION} - - --build-arg=GOLANG_VERSION=${_GOLANG_VERSION} - - --build-arg=ALPINE_VERSION=${_ALPINE_VERSION} - - --build-arg=PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} - - --build-arg=PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} - - --tag=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug - - --load - - . + - --frontend=dockerfile.v0 + - --local=context=/workspace + - --local=dockerfile=/workspace + - --opt=target=golang-debug + - --opt=build-arg:PROTOC_VERSION=${_PROTOC_VERSION} + - --opt=build-arg:GOLANG_VERSION=${_GOLANG_VERSION} + - --opt=build-arg:ALPINE_VERSION=${_ALPINE_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_VERSION=${_PROTOC_GEN_GO_VERSION} + - --opt=build-arg:PROTOC_GEN_GO_GRPC_VERSION=${_PROTOC_GEN_GO_GRPC_VERSION} + - --output=type=image,name=gcr.io/$PROJECT_ID/protoc/golang:${_PROTOC_VERSION}-${_GOLANG_VERSION}-debug,push=true,oci-mediatypes=true,compression=estargz + - --import-cache=type=registry,ref=gcr.io/$PROJECT_ID/protoc/protoc-builder:cloudbuild_cache waitFor: + - "protoc-debug" - "golang-builder" substitutions: _DOCKER_VERSION: "20.10" - _BUILDX_VERSION: "0.7.0-rc1" # https://github.com/docker/buildx/releases/tag/v0.7.0-rc1 - _PROTOC_VERSION: "3.19.0" # https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.0 + _BUILDKIT_VERSION: "v0.10.0" + _PROTOC_VERSION: "3.19.4" # https://github.com/protocolbuffers/protobuf/releases/tag/v3.19.0 _GOLANG_VERSION: "1.17" - _ALPINE_VERSION: "3.14" + _ALPINE_VERSION: "3.15" _PROTOC_GEN_GO_VERSION: "v1.27.1" # https://github.com/protocolbuffers/protobuf-go/releases/tag/v1.27.1 _PROTOC_GEN_GO_GRPC_VERSION: "9c668aeab869" # https://github.com/grpc/grpc-go/tree/9c668aeab869 -# images: -# - "gcr.io/$PROJECT_ID/protoc/protoc:${_PR_NUMBER:-${_PROTOC_VERSION}}" -# - "gcr.io/$PROJECT_ID/protoc/protoc:${_PR_NUMBER:-${_PROTOC_VERSION}}-debug" -# - "gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}" -# - "gcr.io/$PROJECT_ID/protoc/golang:${_PR_NUMBER:-${_PROTOC_VERSION}-${_GOLANG_VERSION}}-debug" - tags: - "protoc.protoc" - "protoc.golang" diff --git a/hack/dockerfiles/buildkit.dockerfile b/hack/dockerfiles/buildkit.dockerfile new file mode 100644 index 0000000..58e0c4b --- /dev/null +++ b/hack/dockerfiles/buildkit.dockerfile @@ -0,0 +1,9 @@ +# syntax=docker.io/docker/dockerfile:1.4.0-labs + +ARG BUILDKIT_VERSION +ARG DOCKER_VERSION + +FROM --platform=$BUILDPLATFORM docker:${DOCKER_VERSION} AS docker + +FROM --platform=$BUILDPLATFORM moby/buildkit:${BUILDKIT_VERSION} AS buildkit +COPY --from=docker /usr/local/bin/docker /usr/local/bin/docker diff --git a/hack/dockerfiles/buildx.dockerfile b/hack/dockerfiles/buildx.dockerfile index c1cce5e..241ce66 100644 --- a/hack/dockerfiles/buildx.dockerfile +++ b/hack/dockerfiles/buildx.dockerfile @@ -2,9 +2,13 @@ ARG DOCKER_VERSION ARG BUILDX_VERSION +ARG BUILDKIT_VERSION FROM --platform=$BUILDPLATFORM docker/buildx-bin:${BUILDX_VERSION} AS buildx +FROM --platform=$BUILDPLATFORM moby/buildkit:${BUILDKIT_VERSION} as buildkit + FROM --platform=$BUILDPLATFORM docker:${DOCKER_VERSION} AS docker COPY --from=buildx /buildx /usr/libexec/docker/cli-plugins/docker-buildx +COPY --from=buildkit /usr/bin/buildctl /usr/bin/buildctl RUN docker buildx version