|
1 |
| -all: build |
| 1 | +ALL_ARCH = amd64 arm64 |
| 2 | +all: $(addprefix build-arch-,$(ALL_ARCH)) |
2 | 3 |
|
3 | 4 | TAG?=dev
|
4 | 5 | FLAGS=
|
5 | 6 | LDFLAGS?=-s
|
6 | 7 | ENVVAR=CGO_ENABLED=0 GO111MODULE=off
|
7 | 8 | GOOS?=linux
|
| 9 | +GOARCH?=$(shell go env GOARCH) |
8 | 10 | REGISTRY?=staging-k8s.gcr.io
|
9 | 11 | DOCKER_NETWORK?=default
|
10 | 12 | ifdef BUILD_TAGS
|
|
27 | 29 | RM_FLAG=
|
28 | 30 | endif
|
29 | 31 |
|
30 |
| -build: clean deps |
31 |
| - $(ENVVAR) GOOS=$(GOOS) go build ${LDFLAGS_FLAG} ${TAGS_FLAG} ./... |
32 |
| - $(ENVVAR) GOOS=$(GOOS) go build -o cluster-autoscaler ${LDFLAGS_FLAG} ${TAGS_FLAG} |
| 32 | +build: build-arch-$(GOARCH) |
33 | 33 |
|
34 |
| -build-binary: clean deps |
35 |
| - $(ENVVAR) GOOS=$(GOOS) go build -o cluster-autoscaler ${LDFLAGS_FLAG} ${TAGS_FLAG} |
| 34 | +build-arch-%: clean-arch-% |
| 35 | + $(ENVVAR) GOOS=$(GOOS) GOARCH=$* go build ${LDFLAGS_FLAG} ${TAGS_FLAG} ./... |
| 36 | + $(ENVVAR) GOOS=$(GOOS) GOARCH=$* go build -o cluster-autoscaler-$* ${LDFLAGS_FLAG} ${TAGS_FLAG} |
36 | 37 |
|
37 |
| -test-unit: clean deps build |
| 38 | +build-binary: build-binary-arch-$(GOARCH) |
| 39 | + |
| 40 | +build-binary-arch-%: clean-arch-% |
| 41 | + $(ENVVAR) GOOS=$(GOOS) GOARCH=$* go build -o cluster-autoscaler-$* ${LDFLAGS_FLAG} ${TAGS_FLAG} |
| 42 | + |
| 43 | +test-unit: clean build |
38 | 44 | GO111MODULE=off go test --test.short -race ./... ${TAGS_FLAG}
|
39 | 45 |
|
40 |
| -dev-release: build-binary execute-release |
41 |
| - @echo "Release ${TAG}${FOR_PROVIDER} completed" |
| 46 | +dev-release: dev-release-arch-$(GOARCH) |
42 | 47 |
|
43 |
| -make-image: |
| 48 | +dev-release-arch-%: build-binary-arch-% make-image-arch-% push-image-arch-% |
| 49 | + @echo "Release ${TAG}${FOR_PROVIDER}-$* completed" |
| 50 | + |
| 51 | +make-image: make-image-arch-$(GOARCH) |
| 52 | + |
| 53 | +make-image-arch-%: |
44 | 54 | ifdef BASEIMAGE
|
45 | 55 | docker build --pull --build-arg BASEIMAGE=${BASEIMAGE} \
|
46 |
| - -t ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG} . |
| 56 | + -t ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG}-$* \ |
| 57 | + -f Dockerfile.$* . |
47 | 58 | else
|
48 |
| - docker build --pull -t ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG} . |
| 59 | + docker build --pull \ |
| 60 | + -t ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG}-$* \ |
| 61 | + -f Dockerfile.$* . |
49 | 62 | endif
|
| 63 | + @echo "Image ${TAG}${FOR_PROVIDER}-$* completed" |
| 64 | + |
| 65 | +push-image: push-image-arch-$(GOARCH) |
50 | 66 |
|
51 |
| -push-image: |
52 |
| - ./push_image.sh ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG} |
| 67 | +push-image-arch-%: |
| 68 | + ./push_image.sh ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG}-$* |
53 | 69 |
|
54 |
| -execute-release: make-image push-image |
| 70 | +push-manifest: |
| 71 | + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest create ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG} \ |
| 72 | + $(addprefix $(REGISTRY)/cluster-autoscaler$(PROVIDER):$(TAG)-, $(ALL_ARCH)) |
| 73 | + DOCKER_CLI_EXPERIMENTAL=enabled docker manifest push --purge ${REGISTRY}/cluster-autoscaler${PROVIDER}:${TAG} |
55 | 74 |
|
56 |
| -clean: |
57 |
| - rm -f cluster-autoscaler |
| 75 | +execute-release: $(addprefix make-image-arch-,$(ALL_ARCH)) $(addprefix push-image-arch-,$(ALL_ARCH)) push-manifest |
| 76 | + @echo "Release ${TAG}${FOR_PROVIDER} completed" |
| 77 | + |
| 78 | +clean: clean-arch-$(GOARCH) |
| 79 | + |
| 80 | +clean-arch-%: |
| 81 | + rm -f cluster-autoscaler-$* |
58 | 82 |
|
59 | 83 | generate:
|
60 | 84 | go generate ./cloudprovider/aws
|
61 | 85 |
|
62 | 86 | format:
|
63 | 87 | test -z "$$(find . -path ./vendor -prune -type f -o -name '*.go' -exec gofmt -s -d {} + | tee /dev/stderr)" || \
|
64 |
| - test -z "$$(find . -path ./vendor -prune -type f -o -name '*.go' -exec gofmt -s -w {} + | tee /dev/stderr)" |
| 88 | + test -z "$$(find . -path ./vendor -prune -type f -o -name '*.go' -exec gofmt -s -w {} + | tee /dev/stderr)" |
65 | 89 |
|
66 | 90 | docker-builder:
|
67 | 91 | docker build --network=${DOCKER_NETWORK} -t autoscaling-builder ../builder
|
68 | 92 |
|
69 |
| -build-in-docker: clean docker-builder |
70 |
| - docker run ${RM_FLAG} -v `pwd`:/gopath/src/k8s.io/autoscaler/cluster-autoscaler/:Z autoscaling-builder:latest bash -c 'cd /gopath/src/k8s.io/autoscaler/cluster-autoscaler && BUILD_TAGS=${BUILD_TAGS} LDFLAGS="${LDFLAGS}" make build-binary' |
| 93 | +build-in-docker: build-in-docker-arch-$(GOARCH) |
71 | 94 |
|
72 |
| -release: build-in-docker execute-release |
| 95 | +build-in-docker-arch-%: clean-arch-% docker-builder |
| 96 | + docker run ${RM_FLAG} -v `pwd`:/gopath/src/k8s.io/autoscaler/cluster-autoscaler/:Z autoscaling-builder:latest \ |
| 97 | + bash -c 'cd /gopath/src/k8s.io/autoscaler/cluster-autoscaler && BUILD_TAGS=${BUILD_TAGS} LDFLAGS="${LDFLAGS}" make build-binary-arch-$*' |
| 98 | + |
| 99 | +release: $(addprefix build-in-docker-arch-,$(ALL_ARCH)) execute-release |
73 | 100 | @echo "Full in-docker release ${TAG}${FOR_PROVIDER} completed"
|
74 | 101 |
|
75 |
| -container: build-in-docker make-image |
76 |
| - @echo "Created in-docker image ${TAG}${FOR_PROVIDER}" |
| 102 | +container: container-arch-$(GOARCH) |
77 | 103 |
|
78 |
| -test-in-docker: clean docker-builder |
79 |
| - docker run ${RM_FLAG} -v `pwd`:/gopath/src/k8s.io/autoscaler/cluster-autoscaler/:Z autoscaling-builder:latest bash -c 'cd /gopath/src/k8s.io/autoscaler/cluster-autoscaler && GO111MODULE=off go test -race ./... ${TAGS_FLAG}' |
| 104 | +container-arch-%: build-in-docker-arch-% make-image-arch-% |
| 105 | + @echo "Full in-docker image ${TAG}${FOR_PROVIDER}-$* completed" |
80 | 106 |
|
81 |
| -.PHONY: all deps build test-unit clean format execute-release dev-release docker-builder build-in-docker release generate |
| 107 | +test-in-docker: clean docker-builder |
| 108 | + docker run ${RM_FLAG} -v `pwd`:/gopath/src/k8s.io/autoscaler/cluster-autoscaler/:Z autoscaling-builder:latest \ |
| 109 | + bash -c 'cd /gopath/src/k8s.io/autoscaler/cluster-autoscaler && GO111MODULE=off go test -race ./... ${TAGS_FLAG}' |
82 | 110 |
|
| 111 | +.PHONY: all build test-unit clean format execute-release dev-release docker-builder build-in-docker release generate push-image push-manifest |
0 commit comments