This repository was archived by the owner on Mar 28, 2023. It is now read-only.
Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
144 lines (109 loc) · 4.54 KB
/
Copy pathMakefile
File metadata and controls
144 lines (109 loc) · 4.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# Common User-Settable Flags
# --------------------------
REGISTRY?=gcr.io/k8s-staging-metrics-server
ARCH?=amd64
# Release variables
# ------------------
GIT_COMMIT?=$(shell git rev-parse "HEAD^{commit}" 2>/dev/null)
GIT_TAG?=$(shell git describe --abbrev=0 --tags 2>/dev/null)
BUILD_DATE:=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
# Consts
# ------
ALL_ARCHITECTURES=amd64 arm arm64 ppc64le s390x
export DOCKER_CLI_EXPERIMENTAL=enabled
# Computed variables
# ------------------
HAS_GOLANGCI:=$(shell which golangci-lint)
GOPATH:=$(shell go env GOPATH)
REPO_DIR:=$(shell pwd)
LDFLAGS=-w $(VERSION_LDFLAGS)
.PHONY: all
all: _output/$(ARCH)/metrics-server
# Build Rules
# -----------
src_deps=$(shell find pkg cmd -type f -name "*.go")
LDFLAGS:=-X sigs.k8s.io/metrics-server/pkg/version.gitVersion=$(GIT_TAG) -X sigs.k8s.io/metrics-server/pkg/version.gitCommit=$(GIT_COMMIT) -X sigs.k8s.io/metrics-server/pkg/version.buildDate=$(BUILD_DATE)
_output/%/metrics-server: $(src_deps) _output vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types_easyjson.go
GOARCH=$* CGO_ENABLED=0 go build -mod=readonly -ldflags "$(LDFLAGS)" -o _output/$*/metrics-server sigs.k8s.io/metrics-server/cmd/metrics-server
vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types_easyjson.go: vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/go.mod go.mod
go get github.com/mailru/easyjson/...
$(GOPATH)/bin/easyjson -all vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types.go
_output:
mkdir -p _output
# Image Rules
# -----------
.PHONY: container
container: container-$(ARCH)
.PHONY: container-*
container-%: vendor/k8s.io/kubernetes/pkg/kubelet/apis/stats/v1alpha1/types_easyjson.go
docker build --pull -t $(REGISTRY)/metrics-server-$*:$(GIT_COMMIT) --build-arg GOARCH=$* --build-arg LDFLAGS='$(LDFLAGS)' .
# Official Container Push Rules
# -----------------------------
.PHONY: push
push: $(addprefix sub-push-,$(ALL_ARCHITECTURES)) push-multi-arch;
.PHONY: sub-push-*
sub-push-%: container-% do-push-% ;
.PHONY: do-push-*
do-push-%:
docker tag $(REGISTRY)/metrics-server-$*:$(GIT_COMMIT) $(REGISTRY)/metrics-server-$*:$(GIT_TAG)
docker push $(REGISTRY)/metrics-server-$*:$(GIT_TAG)
.PHONY: push-multi-arch
push-multi-arch:
docker manifest create --amend $(REGISTRY)/metrics-server:$(GIT_TAG) $(shell echo $(ALL_ARCHITECTURES) | sed -e "s~[^ ]*~$(REGISTRY)/metrics-server\-&:$(GIT_TAG)~g")
@for arch in $(ALL_ARCHITECTURES); do docker manifest annotate --arch $${arch} $(REGISTRY)/metrics-server:$(GIT_TAG) $(REGISTRY)/metrics-server-$${arch}:${GIT_TAG}; done
docker manifest push --purge $(REGISTRY)/metrics-server:$(GIT_TAG)
# Release rules
# -------------
.PHONY: release-tag
release-tag:
git tag $(GIT_TAG)
git push origin $(GIT_TAG)
.PHONY: release-manifests
release-manifests:
kubectl kustomize manifests/release > _output/components.yaml
echo "Please upload file _output/components.yaml to GitHub release"
# Unit tests
# ----------
.PHONY: test-unit
test-unit:
ifeq ($(ARCH),amd64)
GO111MODULE=on GOARCH=$(ARCH) go test -mod=readonly --test.short -race ./pkg/...
else
GO111MODULE=on GOARCH=$(ARCH) go test -mod=readonly --test.short ./pkg/...
endif
# Binary tests
# ------------
.PHONY: test-version
test-version: container
IMAGE=$(REGISTRY)/metrics-server-$(ARCH):$(GIT_COMMIT) EXPECTED_VERSION=$(GIT_TAG) ./test/version.sh
# E2e tests
# -----------
.PHONY: test-e2e
test-e2e: test-e2e-1.18
.PHONY: test-e2e-all
test-e2e-all: test-e2e-1.18 test-e2e-1.17 test-e2e-1.16
.PHONY: test-e2e-1.18
test-e2e-1.18: container-amd64
KUBERNETES_VERSION=v1.18.0@sha256:0e20578828edd939d25eb98496a685c76c98d54084932f76069f886ec315d694 IMAGE=$(REGISTRY)/metrics-server-amd64:$(GIT_COMMIT) ./test/e2e.sh
.PHONY: test-e2e-1.17
test-e2e-1.17: container-amd64
KUBERNETES_VERSION=v1.17.0@sha256:0e20578828edd939d25eb98496a685c76c98d54084932f76069f886ec315d694 IMAGE=$(REGISTRY)/metrics-server-amd64:$(GIT_COMMIT) ./test/e2e.sh
.PHONY: test-e2e-1.16
test-e2e-1.16: container-amd64
KUBERNETES_VERSION=v1.16.4@sha256:b91a2c2317a000f3a783489dfb755064177dbc3a0b2f4147d50f04825d016f55 IMAGE=$(REGISTRY)/metrics-server-amd64:$(GIT_COMMIT) ./test/e2e.sh
# Static analysis
# ---------------
.PHONY: lint
lint:
ifndef HAS_GOLANGCI
curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(GOPATH)/bin latest
endif
golangci-lint run --timeout 10m --modules-download-mode=readonly
.PHONY: fmt
fmt:
find pkg cmd -type f -name "*.go" | xargs gofmt -s -w
# Clean
# -----
.PHONY: clean
clean:
rm -rf _output