11
2- # Produce CRDs that work back to Kubernetes 1.11 (no version conversion)
3- CRD_OPTIONS ?= "crd"
4-
52# Suppress kapp prompts with KAPP_ARGS="--yes"
63KAPP_ARGS ?= "--yes=false"
7-
8- # Tools
9- CONTROLLER_GEN ?= go run -modfile hack/go.mod sigs.k8s.io/controller-tools/cmd/controller-gen
10- DIEGEN ?= go run -modfile hack/go.mod reconciler.io/dies/diegen
11- GOIMPORTS ?= go run -modfile hack/go.mod golang.org/x/tools/cmd/goimports
12- KAPP ?= go run -modfile hack/go.mod carvel.dev/kapp/cmd/kapp
13- KO ?= go run -modfile hack/go.mod github.com/google/ko
14- KUSTOMIZE ?= go run -modfile hack/go.mod sigs.k8s.io/kustomize/kustomize/v5
15- YTT ?= go run -modfile hack/go.mod carvel.dev/ytt/cmd/ytt
16- WOKE ?= go run -modfile hack/go.mod github.com/get-woke/woke
174CA_DATA ?= dist/ca.pem
185
196# Setting SHELL to bash allows bash commands to be executed by recipes.
@@ -36,73 +23,153 @@ all: test
3623# More info on the awk command:
3724# http://linuxcommand.org/lc3_adv_awk.php
3825
26+ .PHONY : help
3927help : # # Display this help.
4028 @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 )
4129
4230# #@ Development
31+ .PHONY : manifests
32+ manifests : controller-gen # # Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
33+ $(CONTROLLER_GEN ) rbac:roleName=manager-role crd webhook paths=" ./..." output:crd:artifacts:config=config/crd/bases
4334
44- manifests : # # Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects.
45- @echo " controller-gen $( CRD_OPTIONS) rbac:roleName=manager-role webhook paths=\" ./...\" output:crd:artifacts:config=config/crd/bases"
46- @$(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role webhook paths=" ./..." output:crd:artifacts:config=config/crd/bases
47-
48- @echo "kustomize build config/default | ytt -f - -f dist/strip-status.yaml > dist/source-controller.yaml"
49- @$(KUSTOMIZE) build config/default | $(YTT) -f - -f dist/strip-status.yaml > dist/source-controller.yaml
50-
51- generate : # # Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
52- @echo " controller-gen object:headerFile=\" hack/boilerplate.go.txt\" paths=\" ./...\" "
53- @$(CONTROLLER_GEN ) object:headerFile=" hack/boilerplate.go.txt" paths=" ./..."
54-
55- @echo "diegen die:headerFile=\"hack/boilerplate.go.txt\" paths=\"./...\""
56- @$(DIEGEN) die:headerFile="hack/boilerplate.go.txt" paths="./..."
57-
58- @echo "find -L . -name 'zz_generated.*.go' -exec goimports --local github.com/vmware-tanzu/tanzu-source-controller -w {} \;"
59- @find -L . -name 'zz_generated.*.go' -exec $(GOIMPORTS) --local github.com/vmware-tanzu/tanzu-source-controller -w {} \;
35+ .PHONY : generate
36+ generate : diegen controller-gen # # Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations.
37+ $(CONTROLLER_GEN ) object:headerFile=" hack/boilerplate.go.txt" paths=" ./..."
38+ $(DIEGEN ) die:headerFile=./hack/boilerplate.go.txt paths=" ./..."
6039
40+ .PHONY : fmt
6141fmt : # # Run go fmt against code.
62- @echo " goimports --local github.com/vmware-tanzu/tanzu-source-controller -w ."
63- @$(GOIMPORTS ) --local github.com/vmware-tanzu/tanzu-source-controller -w .
42+ go fmt ./...
6443
44+ .PHONY : vet
6545vet : # # Run go vet against code.
6646 go vet ./...
6747
68- .PHONY : get-woke
69- get-woke : # # installs latest woke CLI
70- go install github.com/get-woke/woke@latest
71-
72- .PHONY : scan-terms
73- scan-terms : get-woke # # Scan for inclusive terminology
74- woke . -c its-woke-rules.yaml --exit-1-on-failure
75-
76- .PHONY : woke-rules
77- woke-rules : # Downloads woke rules from https://via.vmw.com/its-woke-rules
78- curl -L https://via.vmw.com/its-woke-rules -o its-woke-rules.yaml
48+ .PHONY : test
49+ test : manifests generate fmt vet # # Run unit tests only.
50+ go test ./... -short -coverprofile cover.out
7951
80- test : manifests generate fmt vet # # Run tests.
81- go test ./... -coverprofile cover.out
52+ tidy : # # Run go mod tidy
53+ go mod tidy -v
8254
8355# #@ Build
8456
85- run : test # # Run a controller from your host.
57+ run : tidy test # # Run a controller from your host.
8658 go run ./main.go
8759
88- # #@ Deployment
60+ .PHONY : dist
61+ dist : manifests generate kustomize # # Generate a consolidated YAML with CRDs and deployment.
62+ mkdir -p dist
63+ $(KUSTOMIZE ) build config/default | $(YTT ) -f - -f dist/strip-status.yaml > dist/source-controller.yaml
8964
65+ # #@ Deployment
66+ .PHONY : install
9067install : manifests # # Install CRDs into the K8s cluster specified in ~/.kube/config.
9168 @echo " kapp deploy -a source-controller -n kube-system -f <(kustomize build config/crd)"
9269 @$(KAPP ) deploy -a source-controller -n kube-system -f <( $( KUSTOMIZE) build config/crd) $(KAPP_ARGS )
9370
71+ .PHONY : uninstall
9472uninstall : # # Uninstall CRDs from the K8s cluster specified in ~/.kube/config.
9573 @echo " kapp delete -a source-controller -n kube-system"
9674 @$(KAPP ) delete -a source-controller -n kube-system $(KAPP_ARGS )
9775
76+ .PHONY : deploy
9877deploy : test # # Deploy controller to the K8s cluster specified in ~/.kube/config. Optional CA_DATA=path/to/certfile # a PEM-encoded CA certificate
9978 @echo " kapp deploy -a source-controller -n kube-system -f <(ko resolve -f dist/source-controller.yaml)"
10079 @$(KAPP ) deploy -a source-controller -n kube-system -f <( $( KO) resolve -f <( $( YTT) -f dist/source-controller.yaml -f dist/package-overlay.yaml --data-value-file ca_cert_data=$( CA_DATA) ) ) $(KAPP_ARGS )
10180
81+ .PHONY : undeploy
10282undeploy : # # Undeploy controller from the K8s cluster specified in ~/.kube/config.
10383 @echo " kapp delete -a source-controller -n kube-system"
10484 @$(KAPP ) delete -a source-controller -n kube-system $(KAPP_ARGS )
10585
106- tidy : # # Run go mod tidy
107- go mod tidy -v
108- cd hack; go mod tidy -v
86+
87+
88+ # #@ Dev Tools
89+
90+ # # Location to install dependencies to
91+ LOCALBIN ?= $(shell pwd) /bin
92+ $(LOCALBIN ) :
93+ mkdir -p $(LOCALBIN )
94+
95+ # #@ Tool Binaries
96+ KUBECTL ?= kubectl
97+ YTT ?= $(LOCALBIN ) /ytt
98+ KCTRL ?= $(LOCALBIN ) /kctrl
99+ KAPP ?= $(LOCALBIN ) /kapp
100+ IMGPKG ?= $(LOCALBIN ) /imgpkg
101+ KUSTOMIZE ?= $(LOCALBIN ) /kustomize-$(KUSTOMIZE_VERSION )
102+ CONTROLLER_GEN ?= $(LOCALBIN ) /controller-gen-$(CONTROLLER_TOOLS_VERSION )
103+ GOLANGCI_LINT = $(LOCALBIN ) /golangci-lint-$(GOLANGCI_LINT_VERSION )
104+ KO ?= $(LOCALBIN ) /ko
105+ DIEGEN ?= $(LOCALBIN ) /diegen
106+
107+ # # Tool Versions
108+ KUSTOMIZE_VERSION ?= v5.6.0
109+ CONTROLLER_TOOLS_VERSION ?= v0.17.2
110+ GOLANGCI_LINT_VERSION ?= v1.61.0
111+ KO_VERSION ?= 0.17.1
112+ DIEGEN_VERSION =v0.15.0
113+ GOOS ?= darwin
114+
115+ .PHONY : tools
116+ tools : clean kustomize controller-gen golangci-lint carvel-tools ko-setup diegen # # Setup tools used in local development
117+ ls -al $(LOCALBIN )
118+
119+ .PHONY : kustomize
120+ kustomize : $(KUSTOMIZE ) # # Download kustomize locally if necessary.
121+ $(KUSTOMIZE ) : $(LOCALBIN )
122+ $(call go-install-tool,$(KUSTOMIZE ) ,sigs.k8s.io/kustomize/kustomize/v5,$(KUSTOMIZE_VERSION ) )
123+
124+ .PHONY : controller-gen
125+ controller-gen : $(CONTROLLER_GEN ) # # Download controller-gen locally if necessary.
126+ $(CONTROLLER_GEN ) : $(LOCALBIN )
127+ $(call go-install-tool,$(CONTROLLER_GEN ) ,sigs.k8s.io/controller-tools/cmd/controller-gen,$(CONTROLLER_TOOLS_VERSION ) )
128+
129+ .PHONY : golangci-lint
130+ golangci-lint : $(GOLANGCI_LINT ) # # Download golangci-lint locally if necessary.
131+ $(GOLANGCI_LINT ) : $(LOCALBIN )
132+ $(call go-install-tool,$(GOLANGCI_LINT ) ,github.com/golangci/golangci-lint/cmd/golangci-lint,${GOLANGCI_LINT_VERSION})
133+
134+ .PHONY : carvel-tools
135+ carvel-tools : $(LOCALBIN ) # # Downloads Carvel CLI tools locally
136+ if [[ ! -f $( YTT) ]]; then \
137+ curl -L https://carvel.dev/install.sh | K14SIO_INSTALL_BIN_DIR=$(LOCALBIN ) bash; \
138+ fi
139+
140+ .PHONY : ko-setup
141+ ko-setup : $(KO ) # # Setup for ko binary
142+ $(KO ) : $(LOCALBIN )
143+ @if [ ! -f $( KO) ]; then \
144+ echo curl -sSfL " https://github.com/ko-build/ko/releases/download/v$( KO_VERSION) /ko_$( KO_VERSION) _$( GOOS) _x86_64.tar.gz" ; \
145+ curl -sSfL " https://github.com/ko-build/ko/releases/download/v$( KO_VERSION) /ko_$( KO_VERSION) _$( GOOS) _x86_64.tar.gz" > $(LOCALBIN ) /ko.tar.gz; \
146+ tar xzf $(LOCALBIN ) /ko.tar.gz -C $(LOCALBIN ) /; \
147+ chmod +x $(LOCALBIN ) /ko; \
148+ fi ;
149+
150+ .PHONY : diegen
151+ diegen : $(DIEGEN ) # # Download die-gen locally
152+ $(DIEGEN ) : $(LOCALBIN )
153+ @if [ ! -f $( DIEGEN) ]; then \
154+ echo " # installing $( @) " ; \
155+ GOBIN=$(LOCALBIN ) go install reconciler.io/dies/diegen@$(DIEGEN_VERSION ) ; \
156+ fi ;
157+
158+ .PHONY : clean
159+ clean : # # Remove local downloaded and generated binaries
160+ rm -rf $(LOCALBIN )
161+
162+
163+ # go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
164+ # $1 - target path with name of binary (ideally with version)
165+ # $2 - package url which can be installed
166+ # $3 - specific version of package
167+ define go-install-tool
168+ @[ -f $(1 ) ] || { \
169+ set -e; \
170+ package=$(2 ) @$(3 ) ;\
171+ echo "Downloading $${package}" ;\
172+ GOBIN=$(LOCALBIN ) go install $${package} ;\
173+ mv "$$(echo "$(1 ) " | sed "s/-$(3 ) $$//" ) " $(1 ) ;\
174+ }
175+ endef
0 commit comments