Skip to content

Commit

Permalink
cross: create new variant with protobuf version 3.0.2
Browse files Browse the repository at this point in the history
  • Loading branch information
cpanato committed Feb 15, 2021
1 parent a5e2e38 commit 4655198
Show file tree
Hide file tree
Showing 5 changed files with 174 additions and 6 deletions.
61 changes: 57 additions & 4 deletions images/build/cross/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,75 @@
# limitations under the License.

# include the common image-building Makefiles
include $(CURDIR)/../../Makefile.common-image $(CURDIR)/../Makefile.build-image
include $(CURDIR)/../Makefile.build-image

# set default shell
SHELL=/bin/bash -o pipefail

IMGNAME = kube-cross
IMAGE_VERSION ?= v1.15.8-1
CONFIG ?= go1.15
TYPE ?= default

# Build args
GO_VERSION?=1.15.8
PROTOBUF_VERSION?=3.7.0
ETCD_VERSION?=v3.4.13

IMAGE = $(REGISTRY)/$(IMGNAME)
TAG ?= $(shell git describe --tags --always --dirty)

# Ensure support for 'docker buildx' and 'docker manifest' commands
export DOCKER_CLI_EXPERIMENTAL=enabled

# TODO: Support multi-arch kube-cross images for linux/arm linux/s390x
# Currently some of the components references in the Dockerfile are
# not supported in specific architectures (example etcd does not support s390x)
PLATFORMS ?= linux/amd64 linux/arm64 linux/ppc64le #linux/arm linux/s390x

BUILD_ARGS = --build-arg=GO_VERSION=$(GO_VERSION) \
--build-arg=PROTOBUF_VERSION=$(PROTOBUF_VERSION) \
--build-arg=ETCD_VERSION=$(ETCD_VERSION)
# TODO: Uncomment once all images using this Makefile can be built on all
# supported Kubernetes server platforms.
#PLATFORMS ?= linux/amd64 linux/arm linux/arm64 linux/ppc64le linux/s390x
ARCHS = $(patsubst linux/%,%,$(PLATFORMS))

# build with buildx
# https://github.com/docker/buildx/issues/59
.PHONY: container
container: init-docker-buildx
echo "Building $(IMGNAME) for the following platforms: $(PLATFORMS)"
@for platform in $(PLATFORMS); do \
echo "Starting build for $${platform} platform"; \
docker buildx build \
--load \
--progress plain \
--platform $${platform} \
--tag $(IMAGE)-$${platform##*/}:$(IMAGE_VERSION) \
--tag $(IMAGE)-$${platform##*/}:$(TAG)-$(CONFIG) \
--tag $(IMAGE)-$${platform##*/}:latest-$(CONFIG) \
--tag $(IMAGE)-$${platform##*/}:latest-$(TYPE) \
--build-arg=GO_VERSION=$(GO_VERSION) \
--build-arg=PROTOBUF_VERSION=$(PROTOBUF_VERSION) \
--build-arg=ETCD_VERSION=$(ETCD_VERSION) \
-f $(TYPE)/Dockerfile; \
done

.PHONY: push
push: container
echo "Pushing $(IMGNAME) tags"
@for platform in $(PLATFORMS); do \
echo "Pushing tags for $${platform} platform"; \
docker push $(IMAGE)-$${platform##*/}:$(IMAGE_VERSION); \
docker push $(IMAGE)-$${platform##*/}:$(TAG)-$(CONFIG)-$(TYPE); \
docker push $(IMAGE)-$${platform##*/}:latest-$(CONFIG)-$(TYPE); \
done

.PHONY: manifest
manifest: push
docker manifest create --amend $(IMAGE):$(IMAGE_VERSION) $(shell echo $(ARCHS) | sed -e "s~[^ ]*~$(IMAGE)\-&:$(IMAGE_VERSION)~g")
@for platform in $(ARCHS); do docker manifest annotate --arch "$${platform}" ${IMAGE}:${IMAGE_VERSION} ${IMAGE}-$${platform}:${IMAGE_VERSION}; done
docker manifest push --purge $(IMAGE):$(IMAGE_VERSION)

# enable buildx
.PHONY: init-docker-buildx
init-docker-buildx:
./../../../hack/init-buildx.sh
7 changes: 5 additions & 2 deletions images/build/cross/cloudbuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ steps:
- TAG=$_GIT_TAG
- PULL_BASE_REF=$_PULL_BASE_REF
- CONFIG=$_CONFIG
- TYPE=$_TYPE
- GO_VERSION=$_GO_VERSION
- IMAGE_VERSION=$_IMAGE_VERSION
- PROTOBUF_VERSION=$_PROTOBUF_VERSION
Expand All @@ -31,6 +32,7 @@ substitutions:
_GIT_TAG: '12345'
_PULL_BASE_REF: 'dev'
_CONFIG: 'go0.0'
_TYPE: 'default'
_GO_VERSION: '0.0.0'
_IMAGE_VERSION: 'v0.0.0-0'
_PROTOBUF_VERSION: '0.0.0'
Expand All @@ -41,12 +43,13 @@ tags:
- ${_GIT_TAG}
- ${_PULL_BASE_REF}
- ${_CONFIG}
- ${_TYPE}
- ${_GO_VERSION}
- ${_IMAGE_VERSION}
- ${_PROTOBUF_VERSION}
- ${_ETCD_VERSION}

images:
- 'gcr.io/$PROJECT_ID/kube-cross-amd64:$_IMAGE_VERSION'
- 'gcr.io/$PROJECT_ID/kube-cross-amd64:$_GIT_TAG-$_CONFIG'
- 'gcr.io/$PROJECT_ID/kube-cross-amd64:latest-$_CONFIG'
- 'gcr.io/$PROJECT_ID/kube-cross-amd64:$_GIT_TAG-$_CONFIG-$_TYPE'
- 'gcr.io/$PROJECT_ID/kube-cross-amd64:latest-$_CONFIG-$_TYPE'
File renamed without changes.
102 changes: 102 additions & 0 deletions images/build/cross/legacy/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# Copyright 2020 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# This file creates a standard build environment for building cross
# platform go binary for the architecture kubernetes cares about.

ARG GO_VERSION
FROM golang:${GO_VERSION}

##------------------------------------------------------------
# global ARGs & ENVs

ARG DEBIAN_FRONTEND=noninteractive

ENV GOARM 7
ENV KUBE_DYNAMIC_CROSSPLATFORMS \
armhf \
arm64 \
s390x \
ppc64el

ENV KUBE_CROSSPLATFORMS \
linux/386 \
linux/arm linux/arm64 \
linux/ppc64le \
linux/s390x \
darwin/amd64 darwin/386 \
windows/amd64 windows/386

##------------------------------------------------------------

# Pre-compile the standard go library when cross-compiling. This is much easier now when we have go1.5+
RUN for platform in ${KUBE_CROSSPLATFORMS}; do GOOS=${platform%/*} GOARCH=${platform##*/} go install std; done \
&& go clean -cache

# Install packages
RUN apt-get -q update \
&& apt-get install -qqy \
apt-utils \
file \
jq \
patch \
rsync \
unzip

# Use dynamic cgo linking for architectures other than amd64 for the server platforms
# To install crossbuild essential for other architectures add the following repository.
RUN echo "deb http://archive.ubuntu.com/ubuntu xenial main universe" > /etc/apt/sources.list.d/cgocrosscompiling.list \
&& apt-key adv --no-tty --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32 \
&& apt-get update \
&& apt-get install -y build-essential \
&& for platform in ${KUBE_DYNAMIC_CROSSPLATFORMS}; do apt-get install -y crossbuild-essential-${platform}; done

ARG PROTOBUF_VERSION
ENV ZIPNAME="protoc-${PROTOBUF_VERSION}-linux-x86_64.zip"
RUN mkdir /tmp/protoc && cd /tmp/protoc \
&& wget "https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOBUF_VERSION}/${ZIPNAME}" \
&& unzip "${ZIPNAME}" \
&& chmod -R +rX /tmp/protoc \
&& cp -pr bin /usr/local \
&& cp -pr include /usr/local \
&& rm -rf /tmp/protoc \
&& protoc --version

# work around 64MB tmpfs size in Docker 1.6
ENV TMPDIR /tmp.k8s
RUN mkdir $TMPDIR \
&& chmod a+rwx $TMPDIR \
&& chmod o+t $TMPDIR

# Get the code coverage tool and goimports
RUN go get golang.org/x/tools/cmd/cover \
golang.org/x/tools/cmd/goimports \
&& go clean -cache

# Download and symlink etcd. We need this for our integration tests.
ARG ETCD_VERSION
RUN mkdir -p /usr/local/src/etcd \
&& cd /usr/local/src/etcd \
&& curl -fsSL https://github.com/coreos/etcd/releases/download/${ETCD_VERSION}/etcd-${ETCD_VERSION}-linux-amd64.tar.gz | tar -xz \
&& chown -R $(id -u):$(id -g) /usr/local/src/etcd \
&& ln -s ../src/etcd/etcd-${ETCD_VERSION}-linux-amd64/etcd /usr/local/bin/

# Cleanup a bit
RUN apt-get -qqy remove \
wget \
&& apt-get clean \
&& rm -rf -- \
/var/lib/apt/lists/*

ENTRYPOINT []
10 changes: 10 additions & 0 deletions images/build/cross/variants.yaml
Original file line number Diff line number Diff line change
@@ -1,19 +1,29 @@
variants:
canary:
TYPE: 'default'
CONFIG: 'canary'
GO_VERSION: '1.16rc1'
IMAGE_VERSION: 'v1.16.0-rc.1-canary-1'
PROTOBUF_VERSION: '3.7.0'
ETCD_VERSION: 'v3.4.13'
go1.16:
TYPE: 'default'
CONFIG: 'go1.16'
GO_VERSION: '1.16rc1'
IMAGE_VERSION: 'v1.16.0-rc.1-1'
PROTOBUF_VERSION: '3.7.0'
ETCD_VERSION: 'v3.4.13'
go1.15:
TYPE: 'default'
CONFIG: 'go1.15'
GO_VERSION: '1.15.8'
IMAGE_VERSION: 'v1.15.8-1'
PROTOBUF_VERSION: '3.7.0'
ETCD_VERSION: 'v3.4.13'
go1.15-legacy:
TYPE: 'legacy'
CONFIG: 'go1.15'
GO_VERSION: '1.15.8'
IMAGE_VERSION: 'v1.15.8-legacy-1'
PROTOBUF_VERSION: '3.0.2'
ETCD_VERSION: 'v3.4.13'

0 comments on commit 4655198

Please sign in to comment.