142 lines
4.3 KiB
Makefile
142 lines
4.3 KiB
Makefile
ALL_ARCH = amd64 arm64 s390x
|
|
all: $(addprefix build-arch-,$(ALL_ARCH))
|
|
|
|
TAG?=dev
|
|
FLAGS=
|
|
LDFLAGS?=-s
|
|
ENVVAR=CGO_ENABLED=0
|
|
GOOS?=linux
|
|
GOARCH?=$(shell go env GOARCH)
|
|
REGISTRY?=gcr.io/k8s-staging-autoscaling
|
|
DOCKER_NETWORK?=default
|
|
SUPPORTED_BUILD_TAGS=$(shell ls cloudprovider/builder/ | grep -e '^builder_.*\.go' | sed 's/builder_\(.*\)\.go/\1/')
|
|
ifdef BUILD_TAGS
|
|
TAGS_FLAG=--tags ${BUILD_TAGS}
|
|
PROVIDER=-${BUILD_TAGS}
|
|
FOR_PROVIDER=" for ${BUILD_TAGS}"
|
|
else
|
|
TAGS_FLAG=
|
|
PROVIDER=
|
|
FOR_PROVIDER=
|
|
endif
|
|
ifdef LDFLAGS
|
|
LDFLAGS_FLAG=--ldflags="${LDFLAGS}"
|
|
else
|
|
LDFLAGS_FLAG=
|
|
endif
|
|
ifdef DOCKER_RM
|
|
RM_FLAG=--rm
|
|
else
|
|
RM_FLAG=
|
|
endif
|
|
ifndef AWS_REGION
|
|
AWS_REGION=$(shell aws configure get region)
|
|
endif
|
|
|
|
IMAGE=$(REGISTRY)/cluster-autoscaler$(PROVIDER)
|
|
|
|
export DOCKER_CLI_EXPERIMENTAL := enabled
|
|
|
|
build:
|
|
@$(MAKE) build-arch-$(GOARCH)
|
|
|
|
build-arch-%: clean-arch-%
|
|
$(ENVVAR) GOOS=$(GOOS) GOARCH=$* go build -o cluster-autoscaler-$* ${LDFLAGS_FLAG} ${TAGS_FLAG}
|
|
|
|
test-build-tags:
|
|
@if [ -z "$(SUPPORTED_BUILD_TAGS)" ]; then \
|
|
echo "No supported build tags found"; \
|
|
exit 1; \
|
|
fi
|
|
@for tag in $(SUPPORTED_BUILD_TAGS); do \
|
|
echo "Testing build with tag $$tag"; \
|
|
BUILD_TAGS=$$tag $(MAKE) build || exit 1; \
|
|
done
|
|
|
|
test-unit: clean build
|
|
go test --test.short -race ./... ${TAGS_FLAG}
|
|
|
|
dev-release: dev-release-arch-$(GOARCH)
|
|
|
|
dev-release-arch-%: build-arch-% make-image-arch-% push-image-arch-%
|
|
@echo "Release ${TAG}${FOR_PROVIDER}-$* completed"
|
|
|
|
make-image: make-image-arch-$(GOARCH)
|
|
|
|
make-image-arch-%:
|
|
GOOS=$(GOOS) docker buildx build --pull --platform linux/$* \
|
|
--build-arg "GOARCH=$*" \
|
|
-t ${IMAGE}-$*:${TAG} \
|
|
-f Dockerfile .
|
|
@echo "Image ${TAG}${FOR_PROVIDER}-$* completed"
|
|
|
|
push-image: push-image-arch-$(GOARCH)
|
|
|
|
push-image-arch-%:
|
|
./push_image.sh ${IMAGE}-$*:${TAG}
|
|
|
|
push-release-image-arch-%:
|
|
docker push ${IMAGE}-$*:${TAG}
|
|
|
|
push-manifest:
|
|
docker manifest create ${IMAGE}:${TAG} \
|
|
$(addprefix $(REGISTRY)/cluster-autoscaler$(PROVIDER)-, $(addsuffix :$(TAG), $(ALL_ARCH)))
|
|
docker manifest push --purge ${IMAGE}:${TAG}
|
|
|
|
execute-release: $(addprefix make-image-arch-,$(ALL_ARCH)) $(addprefix push-release-image-arch-,$(ALL_ARCH)) push-manifest
|
|
@echo "Release ${TAG}${FOR_PROVIDER} completed"
|
|
|
|
clean: clean-arch-$(GOARCH)
|
|
|
|
clean-arch-%:
|
|
rm -f cluster-autoscaler-$*
|
|
|
|
generate:
|
|
AWS_REGION=$(AWS_REGION) go generate ./cloudprovider/aws
|
|
|
|
format:
|
|
test -z "$$(find . -path ./vendor -prune -type f -o -name '*.go' -exec gofmt -s -d {} + | tee /dev/stderr)" || \
|
|
test -z "$$(find . -path ./vendor -prune -type f -o -name '*.go' -exec gofmt -s -w {} + | tee /dev/stderr)"
|
|
|
|
docker-builder:
|
|
docker build --network=${DOCKER_NETWORK} -t autoscaling-builder ../builder
|
|
|
|
build-in-docker: build-in-docker-arch-$(GOARCH)
|
|
|
|
build-in-docker-arch-%: clean-arch-% docker-builder
|
|
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-arch-$*'
|
|
|
|
release: $(addprefix build-in-docker-arch-,$(ALL_ARCH)) execute-release
|
|
@echo "Full in-docker release ${TAG}${FOR_PROVIDER} completed"
|
|
|
|
container: container-arch-$(GOARCH)
|
|
|
|
container-arch-%: build-in-docker-arch-% make-image-arch-%
|
|
@echo "Full in-docker image ${TAG}${FOR_PROVIDER}-$* completed"
|
|
|
|
test-in-docker: clean docker-builder
|
|
docker run ${RM_FLAG} -v `pwd`:/cluster-autoscaler/:Z autoscaling-builder:latest bash -c 'cd /cluster-autoscaler && go test -race ./... ${TAGS_FLAG}'
|
|
|
|
.PHONY: all build test-unit clean format execute-release dev-release docker-builder build-in-docker release generate push-image push-manifest
|
|
|
|
## Location to install dependencies to
|
|
LOCALBIN ?= $(shell pwd)/bin
|
|
$(LOCALBIN):
|
|
mkdir -p $(LOCALBIN)
|
|
|
|
## Tool Binaries
|
|
CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen
|
|
|
|
## Tool Versions
|
|
CONTROLLER_TOOLS_VERSION ?= v0.14.0
|
|
|
|
.PHONY: controller-gen
|
|
controller-gen: $(CONTROLLER_GEN) ## Download controller-gen locally if necessary.
|
|
$(CONTROLLER_GEN): $(LOCALBIN)
|
|
test -s $(LOCALBIN)/controller-gen || GOBIN=$(LOCALBIN) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION)
|
|
|
|
.PHONY: manifest
|
|
manifest: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
|
|
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./apis/..." output:crd:artifacts:config=apis/config/crd
|