@@ -49,69 +49,85 @@ all: build
4949# More info on the awk command:
5050# http://linuxcommand.org/lc3_adv_awk.php
5151
52+ .PHONY : help
5253help : # # Display this help.
5354 @awk ' BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST )
5455
5556# #@ Development
5657
58+ .PHONY : manifests
5759manifests : controller-gen # # Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
5860 $(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role webhook paths=" ./..." output:crd:artifacts:config=config/crd/bases
5961
62+ .PHONY : generate
6063generate : controller-gen # # Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
6164 $(CONTROLLER_GEN ) object:headerFile=" hack/boilerplate.go.txt" paths=" ./..."
6265
66+ .PHONY : fmt
6367fmt : # # Run go fmt against code.
6468 go fmt ./...
6569
70+ .PHONY : vet
6671vet : # # Run go vet against code.
6772 go vet ./...
6873
6974ENVTEST_ASSETS_DIR =$(shell pwd) /testbin
75+ .PHONY : test
7076test : manifests generate fmt vet # # Run tests.
7177 mkdir -p ${ENVTEST_ASSETS_DIR}
7278 test -f ${ENVTEST_ASSETS_DIR} /setup-envtest.sh || curl -sSLo ${ENVTEST_ASSETS_DIR} /setup-envtest.sh https://raw.githubusercontent.com/kubernetes-sigs/controller-runtime/v0.7.2/hack/setup-envtest.sh
7379 source ${ENVTEST_ASSETS_DIR} /setup-envtest.sh; fetch_envtest_tools $(ENVTEST_ASSETS_DIR ) ; setup_envtest_env $(ENVTEST_ASSETS_DIR ) ; go test ./... -coverprofile cover.out
7480
81+ .PHONY : view-coverage
7582view-coverage :
7683 go tool cover -html=cover.out
7784
7885# #@ Build
7986
87+ .PHONY : build
8088build : generate fmt vet # # Build manager binary.
8189 go build -o bin/manager main.go
8290
91+ .PHONY : run
8392run : manifests generate fmt vet # # Run a controller from your host.
8493 go run ./main.go
8594
95+ .PHONY : docker-build
8696docker-build : test # # Build docker image with the manager.
8797 @echo " .: ⚙️ Build Container Images"
8898 docker build -t $(IMG_NS ) /${OPERATOR_IMG} :${IMG_TAG} .
8999 cd $(PROJECT_DIR ) /lurker && docker build -t $(IMG_NS ) /$(LURKER_IMG ) :$(IMG_TAG ) .
90100
101+ .PHONY : docker-push
91102docker-push : # # Push docker image with the manager.
92103 docker push $(IMG_NS ) /${OPERATOR_IMG} :${IMG_TAG}
93104 docker push $(IMG_NS ) /$(LURKER_IMG ) :$(IMG_TAG )
94105
106+ .PHONY : docker-export
95107docker-export :
96108 $(MAKE ) docker-export-operator
97109 $(MAKE ) docker-export-lurker
98110
111+ .PHONY : docker-export-operator
99112docker-export-operator :
100113 @echo " .: 💾 Export Operator Image"
101114 docker save $(IMG_NS ) /$(OPERATOR_IMG ) :$(IMG_TAG ) > $(OPERATOR_IMG ) .tar
102115
116+ .PHONY : docker-export-lurker
103117docker-export-lurker :
104118 @echo " .: 💾 Export Lurker Image"
105119 docker save $(IMG_NS ) /$(LURKER_IMG ) :$(IMG_TAG ) > $(LURKER_IMG ) .tar
106120
107121
108122# #@ Deployment
109123
124+ .PHONY : kind-import
110125kind-import :
111126 @echo " .: 💾 Importing the image archive to local kind cluster."
112127 kind load image-archive ./$(OPERATOR_IMG ) .tar
113128 kind load image-archive ./$(LURKER_IMG ) .tar
114129
130+ .PHONY : helm-deploy
115131helm-deploy :
116132 @echo " .: ⚙️ Deploying Operator with the Image tag '$( IMG_TAG) ' into kind."
117133 # If not exists create namespace where the tests will be executed
@@ -126,35 +142,51 @@ helm-deploy:
126142 --set="lurker.image.tag=$(IMG_TAG ) " \
127143 --set="lurker.image.pullPolicy=IfNotPresent"
128144
145+ .PHONY : install
129146install : manifests kustomize # # Install CRDs into the K8s cluster specified in ~/.kube/config.
130147 $(KUSTOMIZE ) build config/crd | kubectl apply -f -
131148
149+ .PHONY : uninstall
132150uninstall : manifests kustomize # # Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
133151 $(KUSTOMIZE ) build config/crd | kubectl delete -f -
134152
153+ .PHONY : deploy
135154deploy : manifests kustomize # # Deploy controller to the K8s cluster specified in ~/.kube/config.
136155 cd config/manager && $(KUSTOMIZE ) edit set image controller=${OPERATOR_IMG}
137156 $(KUSTOMIZE ) build config/default | kubectl apply -f -
138157
158+ .PHONY : undeploy
139159undeploy : # # Undeploy controller from the K8s cluster specified in ~/.kube/config.
140160 $(KUSTOMIZE ) build config/default | kubectl delete -f -
141161
142-
143- CONTROLLER_GEN = $(shell pwd) /bin/controller-gen
144- controller-gen : # # Download controller-gen locally if necessary.
145- $(call go-install-tool,$(CONTROLLER_GEN ) ,sigs.k8s.io/controller-tools/cmd/controller-gen@v0.4.1)
146-
147- KUSTOMIZE = $(shell pwd) /bin/kustomize
148- kustomize : # # Download kustomize locally if necessary.
149- $(call go-install-tool,$(KUSTOMIZE ) ,sigs.k8s.io/kustomize/kustomize/v3@v3.8.7)
150-
151- # go-install-tool will 'go install' any package $2 and install it to $1.
152- # GOBIN needs to be an absolute path so an additional absolute path project dir variable is used
153- ABS_PROJECT_DIR =$(shell dirname $(abspath $(lastword $(MAKEFILE_LIST ) ) ) )
154- define go-install-tool
155- @[ -f $(1 ) ] || { \
156- set -e ;\
157- echo "Downloading $(2 ) " ;\
158- GOBIN=$(ABS_PROJECT_DIR ) /operator/bin go install $(2 ) ;\
159- }
160- endef
162+ # #@ Build Dependencies
163+
164+ # # Location to install dependencies to
165+ LOCALBIN ?= $(shell pwd) /bin
166+ $(LOCALBIN ) :
167+ mkdir -p $(LOCALBIN )
168+
169+ # # Tool Binaries
170+ KUSTOMIZE ?= $(LOCALBIN ) /kustomize
171+ CONTROLLER_GEN ?= $(LOCALBIN ) /controller-gen
172+ ENVTEST ?= $(LOCALBIN ) /setup-envtest
173+
174+ # # Tool Versions
175+ KUSTOMIZE_VERSION ?= v3.8.7
176+ CONTROLLER_TOOLS_VERSION ?= v0.9.2
177+
178+ KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"
179+ .PHONY : kustomize
180+ kustomize : $(KUSTOMIZE ) # # Download kustomize locally if necessary.
181+ $(KUSTOMIZE ) : $(LOCALBIN )
182+ test -s $(LOCALBIN ) /kustomize || { curl -s $( KUSTOMIZE_INSTALL_SCRIPT) | bash -s -- $( subst v,,$( KUSTOMIZE_VERSION) ) $( LOCALBIN) ; }
183+
184+ .PHONY : controller-gen
185+ controller-gen : $(CONTROLLER_GEN ) # # Download controller-gen locally if necessary.
186+ $(CONTROLLER_GEN ) : $(LOCALBIN )
187+ test -s $(LOCALBIN ) /controller-gen || GOBIN=$(LOCALBIN ) go install sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_TOOLS_VERSION )
188+
189+ .PHONY : envtest
190+ envtest : $(ENVTEST ) # # Download envtest-setup locally if necessary.
191+ $(ENVTEST ) : $(LOCALBIN )
192+ test -s $(LOCALBIN ) /setup-envtest || GOBIN=$(LOCALBIN ) go install sigs.k8s.io/controller-runtime/tools/setup-envtest@latest
0 commit comments