git subrepo clone (merge) https://github.com/kubernetes-incubator/metrics-server.git metrics-server
subrepo:
subdir: "metrics-server"
merged: "92d8412"
upstream:
origin: "https://github.com/kubernetes-incubator/metrics-server.git"
branch: "master"
commit: "92d8412"
git-subrepo:
version: "0.4.0"
origin: "???"
commit: "???"
diff --git a/metrics-server/Makefile b/metrics-server/Makefile
new file mode 100644
index 0000000..1998650
--- /dev/null
+++ b/metrics-server/Makefile
@@ -0,0 +1,147 @@
+# 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))