@@ -2,8 +2,7 @@ GOOS ?= $(shell go env GOOS)
22GOARCH ?= $(shell go env GOARCH)
33SOURCES := $(shell find ./cmd/controller-manager -type f -name '* .go')
44
5- BUILD_ARCH ?= linux/$(GOARCH )
6-
5+ RELEASE_ARCHS ?= amd64 arm64
76# Git information
87GIT_VERSION ?= $(shell git describe --tags --abbrev=8 --dirty) # attention: gitlab CI: git fetch should not use shallow
98GIT_COMMIT_HASH ?= $(shell git rev-parse HEAD)
@@ -70,20 +69,44 @@ all: karmada-operator-imgs
7069
7170.PHONY : karmada-operator
7271karmada-operator : $(SOURCES )
73- echo " Building karmada-operator for arch = $( BUILD_ARCH ) "
72+ echo " Building karmada-operator for arch = $( GOARCH ) "
7473 export DOCKER_CLI_EXPERIMENTAL=enabled ; \
75- ! ( docker buildx ls | grep karmada-operator-builder ) && docker buildx create --use --platform=$( BUILD_ARCH ) --name karmada-operator-builder ; \
74+ ! ( docker buildx ls | grep karmada-operator-builder ) && docker buildx create --use --platform=linux/ $( GOARCH ) --name karmada-operator-builder ; \
7675 docker buildx build \
7776 --build-arg karmada-operator_version=$(KARMADA_OPERATOR_VERSION ) \
7877 --build-arg UBUNTU_MIRROR=$(UBUNTU_MIRROR ) \
7978 --builder karmada-operator-builder \
80- --platform $( BUILD_ARCH ) \
81- --tag $(REGISTRY_REPO ) /karmada-operator:$(KARMADA_OPERATOR_IMAGE_VERSION ) \
82- --tag $(REGISTRY_REPO ) /karmada-operator:latest \
79+ --platform linux/ $( GOARCH ) \
80+ --tag $(REGISTRY_REPO ) /karmada-operator- $( GOARCH ) :$(KARMADA_OPERATOR_IMAGE_VERSION ) \
81+ --tag $(REGISTRY_REPO ) /karmada-operator- $( GOARCH ) :latest \
8382 -f ./Dockerfile \
8483 --load \
8584 .
8685
86+
87+ .PHONY : push-multi-architecture-images
88+ push-multi-architecture-images : clean-multi-architecture-images
89+ set -e; \
90+ images=" " ; \
91+ latest_images=" " ; \
92+ for arch in $( RELEASE_ARCHS) ; do \
93+ GOARCH=$$ arch $(MAKE ) karmada-operator; \
94+ image=$(REGISTRY_REPO ) /karmada-operator-$$ arch:$(KARMADA_OPERATOR_IMAGE_VERSION ) ; \
95+ docker push $(REGISTRY_REPO ) /karmada-operator-$$ arch:$(KARMADA_OPERATOR_IMAGE_VERSION ) ; \
96+ images=" $$ images $$ image" ; \
97+ latest_image=$(REGISTRY_REPO ) /karmada-operator-$$ arch:latest; \
98+ docker push $(REGISTRY_REPO ) /karmada-operator-$$ arch:latest; \
99+ latest_images=" $$ latest_images $$ latest_image" ; \
100+ done ; \
101+ docker manifest create $(REGISTRY_REPO ) /karmada-operator:$(KARMADA_OPERATOR_IMAGE_VERSION ) $$ images; \
102+ docker manifest push $(REGISTRY_REPO ) /karmada-operator:$(KARMADA_OPERATOR_IMAGE_VERSION ) ; \
103+ docker manifest create $(REGISTRY_REPO ) /karmada-operator:latest $$ latest_images; \
104+ docker manifest push $(REGISTRY_REPO ) /karmada-operator:latest;
105+
106+ .PHONY : clean-multi-architecture-images
107+ clean-multi-architecture-images :
108+ docker manifest rm $(REGISTRY_REPO ) /karmada-operator:$(KARMADA_OPERATOR_IMAGE_VERSION ) 2> /dev/null; \
109+ docker manifest rm $(REGISTRY_REPO ) /karmada-operator:latest 2> /dev/null; exit 0
87110.PHONY : upload-image
88111upload-image : karmada-operator-imgs
89112 @echo " push images to $( REGISTRY_REPO) "
0 commit comments