forked from openshift/cluster-monitoring-operator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
159 lines (123 loc) · 4.48 KB
/
Makefile
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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
SHELL=/usr/bin/env bash -o pipefail
GO_PKG=github.com/openshift/cluster-monitoring-operator
REPO?=quay.io/openshift/cluster-monitoring-operator
TAG?=$(shell git rev-parse --short HEAD)
VERSION=$(shell cat VERSION | tr -d " \t\n\r")
GO111MODULE?=on
GOPROXY?=http://proxy.golang.org
export GO111MODULE
export GOPROXY
PKGS=$(shell go list ./... | grep -v -E '/vendor/|/test|/examples')
GOLANG_FILES:=$(shell find . -name \*.go -print) pkg/manifests/bindata.go
FIRST_GOPATH:=$(firstword $(subst :, ,$(shell go env GOPATH)))
EMBEDMD_BIN=$(FIRST_GOPATH)/bin/embedmd
GOBINDATA_BIN=$(FIRST_GOPATH)/bin/go-bindata
JB_BINARY=$(FIRST_GOPATH)/bin/jb
GOJSONTOYAML_BINARY=$(FIRST_GOPATH)/bin/gojsontoyaml
ASSETS=$(shell grep -oh 'assets/.*\.yaml' pkg/manifests/manifests.go)
JSONNET_SRC=$(shell find ./jsonnet -type f)
JSONNET_VENDOR=jsonnet/jsonnetfile.lock.json jsonnet/vendor
GO_BUILD_RECIPE=GOOS=linux CGO_ENABLED=0 go build --ldflags="-s -X $(GO_PKG)/pkg/operator.Version=$(VERSION)"
CONTAINER_CMD:=docker run --rm \
-u="$(shell id -u):$(shell id -g)" \
-v "$(shell go env GOCACHE):/.cache/go-build:Z" \
-v "$(PWD):/go/src/$(GO_PKG):Z" \
-w "/go/src/$(GO_PKG)" \
-e GO111MODULE=$(GO111MODULE) \
quay.io/coreos/jsonnet-ci
.PHONY: all
all: format generate build test
.PHONY: clean
clean:
# Remove all files and directories ignored by git.
git clean -Xfd .
############
# Building #
############
.PHONY: build-in-docker
build-in-docker:
$(CONTAINER_CMD) $(MAKE) $(MFLAGS) build
.PHONY: build
build: operator
.PHONY: operator
operator: $(GOLANG_FILES)
$(GO_BUILD_RECIPE) -o operator $(GO_PKG)/cmd/operator
# We need this Make target so that we can build the operator depending
# only on what is checked into the repo, without calling to the internet.
.PHONY: operator-no-deps
operator-no-deps:
$(GO_BUILD_RECIPE) -o operator $(GO_PKG)/cmd/operator
.PHONY: image
image: .hack-operator-image
.hack-operator-image: Dockerfile operator
# Create empty target file, for the sole purpose of recording when this target
# was last executed via the last-modification timestamp on the file. See
# https://www.gnu.org/software/make/manual/make.html#Empty-Targets
docker build -t $(REPO):$(TAG) .
touch $@
##############
# Generating #
##############
.PHONY: vendor
vendor:
go mod tidy
go mod vendor
go mod verify
.PHONY: generate
generate: $(EMBEDMD_BIN) merge-cluster-roles pkg/manifests/bindata.go docs
.PHONY: generate-in-docker
generate-in-docker:
$(CONTAINER_CMD) $(MAKE) $(MFLAGS) generate
jsonnet/vendor: $(JB_BINARY) jsonnet/jsonnetfile.json
cd jsonnet && jb install
$(ASSETS): $(JSONNET_SRC) $(JSONNET_VENDOR) $(GOJSONTOYAML_BINARY) hack/build-jsonnet.sh
./hack/build-jsonnet.sh
pkg/manifests/bindata.go: $(GOBINDATA_BIN) $(ASSETS)
# Using "-modtime 1" to make generate target deterministic. It sets all file time stamps to unix timestamp 1
go-bindata -mode 420 -modtime 1 -pkg manifests -o $@ assets/...
merge-cluster-roles: manifests/0000_50_cluster_monitoring_operator_02-role.yaml
manifests/0000_50_cluster_monitoring_operator_02-role.yaml: $(ASSETS) hack/merge_cluster_roles.py hack/cluster-monitoring-operator-role.yaml.in
python2 hack/merge_cluster_roles.py hack/cluster-monitoring-operator-role.yaml.in `find assets | grep role | grep -v "role-binding" | sort` > $@
.PHONY: docs
docs: Documentation/telemeter_query
embedmd -w `find Documentation -name "*.md"`
Documentation/telemeter_query: manifests/0000_50_cluster_monitoring_operator_04-config.yaml hack/telemeter_query.go
go generate ./hack/telemeter_query.go > Documentation/telemeter_query
##############
# Formatting #
##############
.PHONY: format
format: go-fmt shellcheck
.PHONY: go-fmt
go-fmt:
go fmt $(PKGS)
.PHONY: shellcheck
shellcheck:
hack/shellcheck.sh
###########
# Testing #
###########
.PHONY: test
test: test-unit test-e2e
.PHONY: test-unit
test-unit:
go test -race -short $(PKGS) -count=1
.PHONY: test-e2e
test-e2e: KUBECONFIG?=$(HOME)/.kube/config
test-e2e:
go test -v -timeout=20m ./test/e2e/ --kubeconfig $(KUBECONFIG)
.PHONY: test-sec
test-sec:
@which gosec 2> /dev/null >&1 || { echo "gosec must be installed to lint code"; exit 1; }
gosec -severity medium --confidence medium -quiet ./...
############
# Binaries #
############
$(EMBEDMD_BIN):
@go install -mod=vendor github.com/campoy/embedmd
$(GOBINDATA_BIN):
@go install -mod=vendor github.com/jteeuwen/go-bindata/...
$(JB_BINARY):
@go install -mod=vendor github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb
$(GOJSONTOYAML_BINARY):
@go install -mod=vendor github.com/brancz/gojsontoyaml