This repository has been archived by the owner on Nov 12, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
149 lines (119 loc) · 5.01 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
PACKAGE=github.com/epam/edp-common/pkg/config
CURRENT_DIR=$(shell pwd)
DIST_DIR=${CURRENT_DIR}/dist
BIN_NAME=go-binary
HOST_OS:=$(shell go env GOOS)
HOST_ARCH:=$(shell go env GOARCH)
VERSION?=$(shell git describe --tags)
BUILD_DATE=$(shell date -u +'%Y-%m-%dT%H:%M:%SZ')
GIT_COMMIT=$(shell git rev-parse HEAD)
GIT_TAG=$(shell if [ -z "`git status --porcelain`" ]; then git describe --exact-match --tags HEAD 2>/dev/null; fi)
KUBECTL_VERSION=$(shell go list -m all | grep k8s.io/client-go| cut -d' ' -f2)
override LDFLAGS += \
-X ${PACKAGE}.version=${VERSION} \
-X ${PACKAGE}.buildDate=${BUILD_DATE} \
-X ${PACKAGE}.gitCommit=${GIT_COMMIT} \
-X ${PACKAGE}.kubectlVersion=${KUBECTL_VERSION}
ifneq (${GIT_TAG},)
LDFLAGS += -X ${PACKAGE}.gitTag=${GIT_TAG}
endif
override GCFLAGS +=all=-trimpath=${CURRENT_DIR}
.DEFAULT_GOAL:=help
# set default shell
SHELL=/bin/bash -o pipefail -o errexit
help: ## Display this help
@awk 'BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
.PHONY: manifests
manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
$(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=deploy-templates/crds
.PHONY: generate
generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
$(CONTROLLER_GEN) rbac:roleName=manager-role object paths="./..."
.PHONY: validate-docs
validate-docs: api-docs helm-docs ## Validate helm and api docs
@git diff -s --exit-code deploy-templates/README.md || (echo "Run 'make helm-docs' to address the issue." && git diff && exit 1)
@git diff -s --exit-code docs/api.md || (echo " Run 'make api-docs' to address the issue." && git diff && exit 1)
# Run tests
test: fmt vet
go test ./... -coverprofile=coverage.out `go list ./...`
fmt: ## Run go fmt
go fmt ./...
vet: ## Run go vet
go vet ./...
lint: ## Run go lint
exit 0
.PHONY: build
build: clean ## build operator's binary
CGO_ENABLED=0 GOOS=${HOST_OS} GOARCH=${HOST_ARCH} go build -v -ldflags '${LDFLAGS}' -o ${DIST_DIR}/${BIN_NAME} -gcflags '${GCFLAGS}' ./cmd/manager/main.go
.PHONY: clean
clean: ## clean up
-rm -rf ${DIST_DIR}
## //TODO E2E section below to refactor
# namespace to deploy testable data
E2E_NS="${E2E_NS:-default}"
# admin-console image tag
ADMIN_CONSOLE_TAG="${ADMIN_CONSOLE_TAG:-default}"
# admin-console-operator tag to test
ADMIN_CONSOLE_OPERATOR_TAG="${ADMIN_CONSOLE_OPERATOR_TAG:-default}"
# registry from where to fetch images
DOCKER_REGISTRY_REPO_URL="${DOCKER_REGISTRY_REPO_URL:-default}"
# sets KUBECONFIG env variable
export KUBECONFIG := "${KUBECONFIG}"
# clean up whole testable namespace (delete helm releases/delete ns)
e2e-clean:
./hack/e2e/clean.sh "${E2E_NS}"
# set all resources required to correct admin-console-operator work
setup_prerequisite:
./hack/e2e/e2e_prerequisite.sh "${E2E_NS}" "${DNS_WILDCARD}" "${ADMIN_CONSOLE_TAG}"
# deploy admin-console-operator chart to testable ns
deploy:
./hack/e2e/deploy.sh "${E2E_NS}" "${ADMIN_CONSOLE_TAG}" "${ADMIN_CONSOLE_OPERATOR_TAG}" "${DOCKER_REGISTRY_REPO_URL}"
# run E2E tests
run_tests:
./hack/e2e/tests.sh "${E2E_NS}"
# main target to run all targets needed for correct E2E testing
execute: e2e-clean setup_prerequisite deploy run_tests e2e-clean
# use https://github.com/git-chglog/git-chglog/
.PHONY: changelog
changelog: git-chglog ## generate changelog
ifneq (${NEXT_RELEASE_TAG},)
$(GITCHGLOG) --next-tag v${NEXT_RELEASE_TAG} -o CHANGELOG.md v2.7.0..
else
$(GITCHGLOG) -o CHANGELOG.md v2.7.0..
endif
.PHONY: api-docs
api-docs: crdoc ## generate CRD docs
$(CRDOC) --resources deploy-templates/crds --output docs/api.md
.PHONY: helm-docs
helm-docs: helmdocs ## generate helm docs
$(HELMDOCS)
HELMDOCS = ${CURRENT_DIR}/bin/helm-docs
.PHONY: helmdocs
helmdocs: ## Download helm-docs locally if necessary.
$(call go-get-tool,$(HELMDOCS),github.com/norwoodj/helm-docs/cmd/helm-docs,v1.11.0)
GITCHGLOG = ${CURRENT_DIR}/bin/git-chglog
.PHONY: git-chglog
git-chglog: ## Download git-chglog locally if necessary.
$(call go-get-tool,$(GITCHGLOG),github.com/git-chglog/git-chglog/cmd/git-chglog,v0.15.4)
CRDOC = ${CURRENT_DIR}/bin/crdoc
.PHONY: crdoc
crdoc: ## Download crdoc locally if necessary.
$(call go-get-tool,$(CRDOC),fybrik.io/crdoc,v0.6.1)
CONTROLLER_GEN = ${CURRENT_DIR}/bin/controller-gen
.PHONY: controller-gen
controller-gen: ## Download controller-gen locally if necessary.
$(call go-get-tool,$(CONTROLLER_GEN),sigs.k8s.io/controller-tools/cmd/controller-gen,v0.9.2)
# go-get-tool will 'go get' any package $2 and install it to $1.
PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST))))
define go-get-tool
@[ -f $(1) ] || { \
set -e ;\
TMP_DIR=$$(mktemp -d) ;\
cd $$TMP_DIR ;\
go mod init tmp ;\
echo "Downloading $(2)" ;\
go get -d $(2)@$(3) ;\
GOBIN=$(PROJECT_DIR)/bin go install $(2) ;\
rm -rf $$TMP_DIR ;\
}
endef