# Common User-Settable Flags
# ==========================
PREFIX?=gcr.io/google_containers
FLAGS=
ARCH?=amd64
GOLANG_VERSION?=1.10
# You can set this variable for testing and the built image will also be tagged with this name
IMAGE_NAME?=$(PREFIX)/metrics-server-$(ARCH):$(VERSION)

# by default, build the current arch's binary
# (this needs to be pre-include, for some reason)
all: _output/$(ARCH)/metrics-server

# Constants
# =========
ALL_ARCHITECTURES=amd64 arm arm64 ppc64le s390x
ML_PLATFORMS=linux/amd64,linux/arm,linux/arm64,linux/ppc64le,linux/s390x

# Calculated Variables
# ====================
REPO_DIR:=$(shell pwd)
LDFLAGS=-w $(VERSION_LDFLAGS)
# get the appropriate version information
include hack/Makefile.buildinfo
# Set default base image dynamically for each arch
ifeq ($(ARCH),amd64)
	BASEIMAGE?=busybox
endif
ifeq ($(ARCH),arm)
	BASEIMAGE?=arm32v7/busybox
endif
ifeq ($(ARCH),arm64)
	BASEIMAGE?=arm64v8/busybox
endif
ifeq ($(ARCH),ppc64le)
	BASEIMAGE?=ppc64le/busybox
endif
ifeq ($(ARCH),s390x)
	BASEIMAGE?=s390x/busybox
endif


# Rules
# =====

.PHONY: all test-unit container container-* clean container-only container-only-* tmp-dir push do-push-* sub-push-*

# Build Rules
# -----------

pkg/generated/openapi/zz_generated.openapi.go:
	go run vendor/k8s.io/kube-openapi/cmd/openapi-gen/openapi-gen.go --logtostderr -i k8s.io/metrics/pkg/apis/metrics/v1beta1,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/api/resource,k8s.io/apimachinery/pkg/version -p github.com/kubernetes-incubator/metrics-server/pkg/generated/openapi/ -O zz_generated.openapi -h $(REPO_DIR)/hack/boilerplate.go.txt -r /dev/null

# building depends on all go files (this is mostly redundant in the face of go 1.10's incremental builds,
# but it allows us to safely write actual dependency rules in our makefile)
src_deps=$(shell find pkg cmd -type f -name "*.go" -and ! -name "zz_generated.*.go")
_output/%/metrics-server: $(src_deps) pkg/generated/openapi/zz_generated.openapi.go
	GOARCH=$* CGO_ENABLED=0 go build -ldflags "$(LDFLAGS)" -o _output/$*/metrics-server github.com/kubernetes-incubator/metrics-server/cmd/metrics-server

# Image Rules
# -----------

# build a container using containerized build (the current arch by default)
container: container-$(ARCH)

container-%: pkg/generated/openapi/zz_generated.openapi.go tmpdir
	# Run the build in a container in order to have reproducible builds
	docker run --rm -v $(TEMP_DIR):/build -v $(REPO_DIR):/go/src/github.com/kubernetes-incubator/metrics-server -w /go/src/github.com/kubernetes-incubator/metrics-server golang:$(GOLANG_VERSION) /bin/bash -c "\
		GOARCH=$(ARCH) CGO_ENABLED=0 go build -ldflags \"$(LDFLAGS)\" -o /build/metrics-server github.com/kubernetes-incubator/metrics-server/cmd/metrics-server"

	# copy the base Dockerfile into the temp dir, and set the base image
	cp deploy/docker/Dockerfile $(TEMP_DIR)
	sed -i -e "s|BASEIMAGE|$(BASEIMAGE)|g" $(TEMP_DIR)/Dockerfile

	# run the actual build
	docker build --pull -t $(IMAGE_NAME) $(TEMP_DIR)

	# remove our TEMP_DIR, as needed
	rm -rf $(TEMP_DIR)

# build a container using a locally-built binary (the current arch by default)
container-only: container-only-$(ARCH)

container-only-%: _output/$(ARCH)/metrics-server tmpdir
	# copy the base Dockerfile and binary into the temp dir, and set the base image
	cp deploy/docker/Dockerfile $(TEMP_DIR)
	cp _output/$(ARCH)/metrics-server $(TEMP_DIR)
	sed -i -e "s|BASEIMAGE|$(BASEIMAGE)|g" $(TEMP_DIR)/Dockerfile

	# run the actual build
	docker build --pull -t $(IMAGE_NAME) $(TEMP_DIR)

	# remove our TEMP_DIR, as needed
	rm -rf $(TEMP_DIR)

# Official Container Push Rules
# -----------------------------

# do the actual push for official images
do-push-%:
	# push with main tag
	docker push $(PREFIX)/metrics-server-$*:$(VERSION)

	# push alternate tags
ifeq ($(ARCH),amd64)
	# TODO: Remove this and push the manifest list as soon as it's working
	docker tag $(PREFIX)/metrics-server-$*:$(VERSION) $(PREFIX)/metrics-server:$(VERSION)
	docker push $(PREFIX)/metrics-server:$(VERSION)
endif

# do build and then push a given official image
sub-push-%: container-% do-push-% ;

# do build and then push all official images
push: gcr-login $(addprefix sub-push-,$(ALL_ARCHITECTURES)) ;
	# TODO: push with manifest-tool?
	# Should depend on target: ./manifest-tool

# log in to the official container registry
gcr-login:
ifeq ($(findstring gcr.io,$(PREFIX)),gcr.io)
	@echo "If you are pushing to a gcr.io registry, you have to be logged in via 'docker login'; 'gcloud docker push' can't push manifest lists yet."
	@echo "This script is automatically logging you in now with 'gcloud docker -a'"
	gcloud docker -a
endif

# Utility Rules
# -------------

clean:
	rm -rf _output
	rm pkg/generated/openapi/zz_generated.openapi.go

fmt:
	find pkg cmd -type f -name "*.go" | xargs gofmt -s -w

test-unit: pkg/generated/openapi/zz_generated.openapi.go
ifeq ($(ARCH),amd64)
	GOARCH=$(ARCH) go test --test.short -race ./pkg/... $(FLAGS)
else
	GOARCH=$(ARCH) go test --test.short ./pkg/... $(FLAGS)
endif

# set up a temporary director when we need it
# it's the caller's responsibility to clean it up
tmpdir:
	$(eval TEMP_DIR:=$(shell mktemp -d /tmp/metrics-server.XXXXXX))
