From 046b970edb4ea3f4da2d4a3e77fdd501fbd868ca Mon Sep 17 00:00:00 2001 From: Damien Grisonnet Date: Wed, 30 Jun 2021 15:01:34 +0200 Subject: [PATCH] deploy: improve container push rules Improve and cleanup container push rules to prepare for the move to the official gcr.k8s.io registry. As part of the improvements, I replaced the non cross platform busybox image by gcr.io/distroless/static:latest which is platform agnostic. Signed-off-by: Damien Grisonnet --- .travis-deploy.sh | 4 +-- Dockerfile | 7 ++-- Makefile | 85 +++++++++++++++++++++++++---------------------- 3 files changed, 50 insertions(+), 46 deletions(-) diff --git a/.travis-deploy.sh b/.travis-deploy.sh index 0f0b5d90..e02be004 100755 --- a/.travis-deploy.sh +++ b/.travis-deploy.sh @@ -3,7 +3,7 @@ set -x docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" if [[ -n $TRAVIS_TAG ]]; then - make push TAG="$(cat "VERSION")" + make push else - make push-amd64 + TAG=latest make push fi diff --git a/Dockerfile b/Dockerfile index 92eee6d0..378d25ed 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,6 @@ -ARG BASEIMAGE -ARG GOIMAGE +ARG GO_VERSION -FROM ${GOIMAGE} as build +FROM golang:${GO_VERSION} as build WORKDIR /go/src/sigs.k8s.io/prometheus-adapter COPY go.mod . @@ -15,7 +14,7 @@ COPY Makefile Makefile ARG ARCH RUN make prometheus-adapter -FROM ${BASEIMAGE} +FROM gcr.io/distroless/static:latest COPY --from=build /go/src/sigs.k8s.io/prometheus-adapter/adapter / USER 65534 diff --git a/Makefile b/Makefile index 28a16cbe..5739674b 100644 --- a/Makefile +++ b/Makefile @@ -2,26 +2,12 @@ REGISTRY?=directxman12 IMAGE?=k8s-prometheus-adapter ARCH?=$(shell go env GOARCH) ALL_ARCH=amd64 arm arm64 ppc64le s390x -ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x -TAG?=latest -GOIMAGE=golang:1.16 +VERSION=$(shell cat VERSION) +TAG_PREFIX=v +TAG?=$(TAG_PREFIX)$(VERSION) -ifeq ($(ARCH),amd64) - BASEIMAGE?=busybox -endif -ifeq ($(ARCH),arm) - BASEIMAGE?=armhf/busybox -endif -ifeq ($(ARCH),arm64) - BASEIMAGE?=aarch64/busybox -endif -ifeq ($(ARCH),ppc64le) - BASEIMAGE?=ppc64le/busybox -endif -ifeq ($(ARCH),s390x) - BASEIMAGE?=s390x/busybox -endif +GO_VERSION?=1.16.4 .PHONY: all all: prometheus-adapter @@ -29,31 +15,56 @@ all: prometheus-adapter # Build # ----- -src_deps=$(shell find pkg cmd -type f -name "*.go") -prometheus-adapter: $(src_deps) +SRC_DEPS=$(shell find pkg cmd -type f -name "*.go") + +prometheus-adapter: $(SRC_DEPS) CGO_ENABLED=0 GOARCH=$(ARCH) go build sigs.k8s.io/prometheus-adapter/cmd/adapter -.PHONY: docker-build -docker-build: - docker build -t $(REGISTRY)/$(IMAGE)-$(ARCH):$(TAG) --build-arg ARCH=$(ARCH) --build-arg BASEIMAGE=$(BASEIMAGE) --build-arg GOIMAGE=$(GOIMAGE) . +.PHONY: container +container: + docker build -t $(REGISTRY)/$(IMAGE)-$(ARCH):$(TAG) --build-arg ARCH=$(ARCH) --build-arg GO_VERSION=$(GO_VERSION) . -.PHONY: push-% -push-%: - $(MAKE) ARCH=$* docker-build - docker push $(REGISTRY)/$(IMAGE)-$*:$(TAG) +# Container push +# -------------- + +PUSH_ARCH_TARGETS=$(addprefix push-,$(ALL_ARCH)) .PHONY: push -push: ./manifest-tool $(addprefix push-,$(ALL_ARCH)) - ./manifest-tool push from-args --platforms $(ML_PLATFORMS) --template $(REGISTRY)/$(IMAGE)-ARCH:$(TAG) --target $(REGISTRY)/$(IMAGE):$(TAG) +push: container + docker push $(REGISTRY)/$(IMAGE)-$(ARCH):$(TAG) -./manifest-tool: - curl -sSL https://github.com/estesp/manifest-tool/releases/download/v0.5.0/manifest-tool-linux-amd64 > manifest-tool - chmod +x manifest-tool +push-all: $(PUSH_ARCH_TARGETS) push-multi-arch; + +.PHONY: $(PUSH_ARCH_TARGETS) +$(PUSH_ARCH_TARGETS): push-%: + ARCH=$* $(MAKE) push + +.PHONY: push-multi-arch +push-multi-arch: + @export DOCKER_CLI_EXPERIMENTAL=enabled + docker manifest create --amend $(REGISTRY)/$(IMAGE):$(TAG) $(shell echo $(ALL_ARCH) | sed -e "s~[^ ]*~$(IMAGE)\-&:$(TAG)~g") + @for arch in $(ALL_ARCH); do docker manifest annotate --arch $${arch} $(REGISTRY)/$(IMAGE):$(TAG) $(REGISTRY)/$(IMAGE)-$${arch}:$(TAG); done + docker manifest push --purge $(REGISTRY)/$(IMAGE):$(TAG) + +# Test +# ---- .PHONY: test test: CGO_ENABLED=0 go test ./cmd/... ./pkg/... +# Static analysis +# --------------- + +.PHONY: verify +verify: verify-gofmt verify-deps verify-generated test + +.PHONY: update +update: update-generated + +# Format +# ------ + .PHONY: verify-gofmt verify-gofmt: ./hack/gofmt-all.sh -v @@ -62,12 +73,6 @@ verify-gofmt: gofmt: ./hack/gofmt-all.sh -.PHONY: verify -verify: verify-gofmt verify-deps verify-generated test - -.PHONY: update -update: update-generated - # Dependencies # ------------ @@ -77,8 +82,8 @@ verify-deps: go mod tidy @git diff --exit-code -- go.mod go.sum -# Generated -# --------- +# Generation +# ---------- generated_files=pkg/api/generated/openapi/zz_generated.openapi.go