@@ -3,8 +3,10 @@ IMG ?= fluxcd/source-controller:latest
33# Produce CRDs that work back to Kubernetes 1.16
44CRD_OPTIONS ?= crd:crdVersions=v1
55
6- ENVTEST_BIN_VERSION? =1.19.2
7- KUBEBUILDER_ASSETS? =$(shell $(SETUP_ENVTEST ) use -i $(ENVTEST_BIN_VERSION ) -p path)
6+ CONTROLLER_GEN_VERSION ?= v0.5.0
7+ GEN_API_REF_DOCS_VERSION ?= 0.3.0
8+ ENVTEST_BIN_VERSION ?= 1.19.2
9+ KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST ) use -i $(ENVTEST_BIN_VERSION ) -p path)
810
911# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
1012ifeq (,$(shell go env GOBIN) )
@@ -13,121 +15,168 @@ else
1315GOBIN =$(shell go env GOBIN)
1416endif
1517
16- all : manager
18+ REPOSITORY_ROOT := $(shell git rev-parse --show-toplevel)
19+ LIBGIT2_DIR := hack/libgit2
1720
18- # Run tests
19- test : generate fmt vet manifests api-docs setup-envtest
20- KUBEBUILDER_ASSETS=$(KUBEBUILDER_ASSETS ) go test ./... -coverprofile cover.out
21- cd api; go test ./... -coverprofile cover.out
21+ LIBGIT2_SHARED_DIR := $(LIBGIT2_DIR ) /shared
22+ LIBGIT2_SHARED_LIB := $(LIBGIT2_SHARED_DIR ) /install/lib
23+ LIBGIT2_SHARED_BUILD := $(LIBGIT2_SHARED_LIB ) /libgit2.so
24+ LIBGIT2_SHARED_PKG_CONFIG := $(LIBGIT2_SHARED_LIB ) /pkgconfig
25+
26+ LIBGIT2_STATIC_DIR := $(LIBGIT2_DIR ) /static
27+ LIBGIT2_STATIC_LIB := $(LIBGIT2_STATIC_DIR ) /install/lib
28+ LIBGIT2_STATIC_BUILD := $(LIBGIT2_STATIC_LIB ) /libgit2.a
29+ LIBGIT2_STATIC_PKG_CONFIG := $(LIBGIT2_STATIC_LIB ) /pkgconfig
30+
31+ all : build
2232
23- # Build manager binary
24- manager : generate fmt vet
33+ build : $(LIBGIT2_SHARED_BUILD ) generate fmt vet # # Build manager binary
34+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
35+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
2536 go build -o bin/manager main.go
2637
27- # Run against the configured Kubernetes cluster in ~/.kube/config
28- run : generate fmt vet manifests
38+ build-static : $(LIBGIT2_STATIC_BUILD ) generate fmt vet # # Build static manager binary
39+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
40+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
41+ go build -tags static,system_libgit2 -o bin/manager-static main.go
42+
43+ test : $(LIBGIT2_SHARED_BUILD ) test-api # # Run tests
44+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
45+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
46+ go test ./... -coverprofile cover.out
47+
48+ test-static : $(LIBGIT2_STATIC_BUILD ) test-api # # Run static tests
49+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
50+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
51+ go test -tags static,system_libgit2 ./... -coverprofile cover.out
52+
53+ test-api : # # Run api tests
54+ cd api; go test ./... -coverprofile cover.out
55+
56+ run : $(LIBGIT2_SHARED_BUILD ) generate fmt vet manifests # # Run against the configured Kubernetes cluster in ~/.kube/config
57+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
58+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
2959 go run ./main.go
3060
31- # Install CRDs into a cluster
32- install : manifests
61+ run-static : $(LIBGIT2_STATIC_BUILD ) generate fmt vet manifests # # Static run against the configured Kubernetes cluster in ~/.kube/config
62+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
63+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
64+ go run ./main.go
65+
66+ install : manifests # # Install CRDs into a cluster
3367 kustomize build config/crd | kubectl apply -f -
3468
35- # Uninstall CRDs from a cluster
36- uninstall : manifests
69+ uninstall : manifests # # Uninstall CRDs from a cluster
3770 kustomize build config/crd | kubectl delete -f -
3871
39- # Deploy controller in the configured Kubernetes cluster in ~/.kube/config
40- deploy : manifests
72+ deploy : manifests # # Deploy controller in the configured Kubernetes cluster in ~/.kube/config
4173 cd config/manager && kustomize edit set image fluxcd/source-controller=${IMG}
4274 kustomize build config/default | kubectl apply -f -
4375
44- # Deploy controller dev image in the configured Kubernetes cluster in ~/.kube/config
45- dev-deploy :
76+ dev-deploy : # # Deploy controller dev image in the configured Kubernetes cluster in ~/.kube/config
4677 mkdir -p config/dev && cp config/default/* config/dev
4778 cd config/dev && kustomize edit set image fluxcd/source-controller=${IMG}
4879 kustomize build config/dev | kubectl apply -f -
4980 rm -rf config/dev
5081
51- # Generate manifests e.g. CRD, RBAC etc.
52- manifests : controller-gen
82+ manifests : controller-gen # # Generate manifests, e.g. CRD, RBAC, etc.
5383 $(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role paths=" ./..." output:crd:artifacts:config=" config/crd/bases"
5484 cd api; $(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role paths=" ./..." output:crd:artifacts:config=" ../config/crd/bases"
5585
56- # Generate API reference documentation
57- api-docs : gen-crd-api-reference-docs
86+ api-docs : gen-crd-api-reference-docs # # Generate API reference documentation
5887 $(API_REF_GEN ) -api-dir=./api/v1beta1 -config=./hack/api-docs/config.json -template-dir=./hack/api-docs/template -out-file=./docs/api/source.md
5988
60- # Run go mod tidy
61- tidy :
89+ tidy : # # Run go mod tidy
6290 go mod tidy
6391 cd api; go mod tidy
6492
65- # Run go fmt against code
66- fmt :
93+ fmt : # # Run go fmt against code
6794 go fmt ./...
6895 cd api; go fmt ./...
6996
70- # Run go vet against code
71- vet :
97+ vet : # # Run go vet against code
7298 go vet ./...
7399 cd api; go vet ./...
74100
75- # Generate code
76- generate : controller-gen
101+ generate : controller-gen # # Generate API code
77102 cd api; $(CONTROLLER_GEN ) object:headerFile=" ../hack/boilerplate.go.txt" paths=" ./..."
78103
79- # Build the docker image
80- docker-build :
104+ docker-build : # # Build the docker image
81105 docker build . -t ${IMG}
82106
83- # Push the docker image
84- docker-push :
107+ docker-push : # # Push docker image
85108 docker push ${IMG}
86109
87- # Find or download controller-gen
88- controller-gen :
110+ $(LIBGIT2_SHARED_BUILD ) : $(LIBGIT2_SHARED_DIR )
111+ (cd $( LIBGIT2_SHARED_DIR) && cmake -DBUILD_SHARED_LIBS:BOOL=ON .. && cmake --build .)
112+
113+ $(LIBGIT2_STATIC_BUILD ) : $(LIBGIT2_STATIC_DIR )
114+ (cd $( LIBGIT2_STATIC_DIR) && cmake -DBUILD_SHARED_LIBS:BOOL=OFF .. && cmake --build .)
115+
116+ $(LIBGIT2_SHARED_DIR ) :
117+ mkdir -p " $@ "
118+
119+ $(LIBGIT2_STATIC_DIR ) :
120+ mkdir -p " $@ "
121+
122+ .PHONY : clean
123+ clean : # # Removes dependency builds and clears Go cache
124+ rm -rf $(LIBGIT2_SHARED_DIR )
125+ rm -rf $(LIBGIT2_STATIC_DIR )
126+
127+ # C-binding directives in Go are cached, which means that e.g.
128+ # changes to $PKG_CONFIG_PATH do not have an effect until this cache
129+ # is cleared and the package(s) is forced to be rebuild.
130+ # This can also be done using `go <cmd> -a`, but this would make
131+ # things slow for something that is not expected to change much,
132+ # unless you are specifically dealing with build related changes.
133+ go clean
134+
135+ controller-gen : # # Find or download controller-gen
89136ifeq (, $(shell which controller-gen) )
90137 @{ \
91- set -e ; \
92- CONTROLLER_GEN_TMP_DIR=$$(mktemp -d) ; \
93- cd $$CONTROLLER_GEN_TMP_DIR ; \
94- go mod init tmp ; \
95- go get sigs.k8s.io/controller-tools/cmd/controller-gen@v0.5.0 ; \
96- rm -rf $$CONTROLLER_GEN_TMP_DIR ; \
138+ set -e; \
139+ CONTROLLER_GEN_TMP_DIR=$$(mktemp -d); \
140+ cd $$CONTROLLER_GEN_TMP_DIR; \
141+ go mod init tmp; \
142+ go get sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_GEN_VERSION); \
143+ rm -rf $$CONTROLLER_GEN_TMP_DIR; \
97144 }
98145CONTROLLER_GEN =$(GOBIN ) /controller-gen
99146else
100147CONTROLLER_GEN =$(shell which controller-gen)
101148endif
102149
103- # Find or download gen-crd-api-reference-docs
104- gen-crd-api-reference-docs :
150+ gen-crd-api-reference-docs : # # Find or download gen-crd-api-reference-docs
105151ifeq (, $(shell which gen-crd-api-reference-docs) )
106152 @{ \
107- set -e ; \
108- API_REF_GEN_TMP_DIR=$$(mktemp -d) ; \
109- cd $$API_REF_GEN_TMP_DIR ; \
110- go mod init tmp ; \
111- go get github.com/ahmetb/gen-crd-api-reference-docs@v0.3.0 ; \
112- rm -rf $$API_REF_GEN_TMP_DIR ; \
153+ set -e; \
154+ API_REF_GEN_TMP_DIR=$$(mktemp -d); \
155+ cd $$API_REF_GEN_TMP_DIR; \
156+ go mod init tmp; \
157+ go get github.com/ahmetb/gen-crd-api-reference-docs@$(GEN_API_REF_DOCS_VERSION); \
158+ rm -rf $$API_REF_GEN_TMP_DIR; \
113159 }
114160API_REF_GEN =$(GOBIN ) /gen-crd-api-reference-docs
115161else
116162API_REF_GEN =$(shell which gen-crd-api-reference-docs)
117163endif
118164
119- # Find or download setup-envtest
120- setup-envtest :
165+ setup-envtest : # # Find or download setup-envtest
121166ifeq (, $(shell which setup-envtest) )
122167 @{ \
123- set -e ; \
124- SETUP_ENVTEST_TMP_DIR=$$(mktemp -d) ; \
125- cd $$SETUP_ENVTEST_TMP_DIR ; \
126- go mod init tmp ; \
127- go get sigs.k8s.io/controller-runtime/tools/setup-envtest@latest ; \
128- rm -rf $$SETUP_ENVTEST_TMP_DIR ; \
168+ set -e; \
169+ SETUP_ENVTEST_TMP_DIR=$$(mktemp -d); \
170+ cd $$SETUP_ENVTEST_TMP_DIR; \
171+ go mod init tmp; \
172+ go get sigs.k8s.io/controller-runtime/tools/setup-envtest@latest; \
173+ rm -rf $$SETUP_ENVTEST_TMP_DIR; \
129174 }
130175SETUP_ENVTEST =$(GOBIN ) /setup-envtest
131176else
132177SETUP_ENVTEST =$(shell which setup-envtest)
133178endif
179+
180+ .PHONY : help
181+ help : # # Display this help menu.
182+ @awk ' BEGIN {FS = ":.*##"; printf "\nUsage:\n make \033[36m<target>\033[0m\n"} /^[a-zA-Z_0-9-]+:.*?##/ { printf " \033[36m%-20s\033[0m %s\n", $$1, $$2 } /^##@/ { printf "\n\033[1m%s\033[0m\n", substr($$0, 5) } ' $(MAKEFILE_LIST )
0 commit comments