@@ -3,8 +3,11 @@ IMG ?= fluxcd/source-controller:latest
3
3
# Produce CRDs that work back to Kubernetes 1.16
4
4
CRD_OPTIONS ?= crd:crdVersions=v1
5
5
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
+
10
+ KUBEBUILDER_ASSETS ?= $(shell $(SETUP_ENVTEST ) use -i $(ENVTEST_BIN_VERSION ) -p path)
8
11
9
12
# Get the currently used golang install path (in GOPATH/bin, unless GOBIN is set)
10
13
ifeq (,$(shell go env GOBIN) )
@@ -13,121 +16,168 @@ else
13
16
GOBIN =$(shell go env GOBIN)
14
17
endif
15
18
16
- all : manager
19
+ REPOSITORY_ROOT := $(shell git rev-parse --show-toplevel)
20
+ LIBGIT2_DIR := hack/libgit2
17
21
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
22
+ LIBGIT2_SHARED_DIR := $(LIBGIT2_DIR ) /shared
23
+ LIBGIT2_SHARED_LIB := $(LIBGIT2_SHARED_DIR ) /install/lib
24
+ LIBGIT2_SHARED_BUILD := $(LIBGIT2_SHARED_LIB ) /libgit2.so
25
+ LIBGIT2_SHARED_PKG_CONFIG := $(LIBGIT2_SHARED_LIB ) /pkgconfig
26
+
27
+ LIBGIT2_STATIC_DIR := $(LIBGIT2_DIR ) /static
28
+ LIBGIT2_STATIC_LIB := $(LIBGIT2_STATIC_DIR ) /install/lib
29
+ LIBGIT2_STATIC_BUILD := $(LIBGIT2_STATIC_LIB ) /libgit2.a
30
+ LIBGIT2_STATIC_PKG_CONFIG := $(LIBGIT2_STATIC_LIB ) /pkgconfig
22
31
23
- # Build manager binary
24
- manager : generate fmt vet
32
+ all : build
33
+
34
+ build : $(LIBGIT2_SHARED_BUILD ) generate fmt vet # # Build manager binary
35
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
36
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
25
37
go build -o bin/manager main.go
26
38
27
- # Run against the configured Kubernetes cluster in ~/.kube/config
28
- run : generate fmt vet manifests
39
+ build-static : $(LIBGIT2_STATIC_BUILD ) generate fmt vet # # Build static manager binary
40
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
41
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
42
+ go build -tags static,system_libgit2 -o bin/manager-static main.go
43
+
44
+ test : $(LIBGIT2_SHARED_BUILD ) test-api # # Run tests
45
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
46
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
47
+ go test ./... -coverprofile cover.out
48
+
49
+ test-static : $(LIBGIT2_STATIC_BUILD ) test-api # # Run static tests
50
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
51
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
52
+ go test -tags static,system_libgit2 ./... -coverprofile cover.out
53
+
54
+ test-api : # # Run api tests
55
+ cd api; go test ./... -coverprofile cover.out
56
+
57
+ run : $(LIBGIT2_SHARED_BUILD ) generate fmt vet manifests # # Run against the configured Kubernetes cluster in ~/.kube/config
58
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_PKG_CONFIG ) \
59
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_SHARED_LIB ) \
29
60
go run ./main.go
30
61
31
- # Install CRDs into a cluster
32
- install : manifests
62
+ run-static : $(LIBGIT2_STATIC_BUILD ) generate fmt vet manifests # # Static run against the configured Kubernetes cluster in ~/.kube/config
63
+ PKG_CONFIG_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_PKG_CONFIG ) \
64
+ LD_LIBRARY_PATH=$(REPOSITORY_ROOT ) /$(LIBGIT2_STATIC_LIB ) \
65
+ go run ./main.go
66
+
67
+ install : manifests # # Install CRDs into a cluster
33
68
kustomize build config/crd | kubectl apply -f -
34
69
35
- # Uninstall CRDs from a cluster
36
- uninstall : manifests
70
+ uninstall : manifests # # Uninstall CRDs from a cluster
37
71
kustomize build config/crd | kubectl delete -f -
38
72
39
- # Deploy controller in the configured Kubernetes cluster in ~/.kube/config
40
- deploy : manifests
73
+ deploy : manifests # # Deploy controller in the configured Kubernetes cluster in ~/.kube/config
41
74
cd config/manager && kustomize edit set image fluxcd/source-controller=${IMG}
42
75
kustomize build config/default | kubectl apply -f -
43
76
44
- # Deploy controller dev image in the configured Kubernetes cluster in ~/.kube/config
45
- dev-deploy :
77
+ dev-deploy : # # Deploy controller dev image in the configured Kubernetes cluster in ~/.kube/config
46
78
mkdir -p config/dev && cp config/default/* config/dev
47
79
cd config/dev && kustomize edit set image fluxcd/source-controller=${IMG}
48
80
kustomize build config/dev | kubectl apply -f -
49
81
rm -rf config/dev
50
82
51
- # Generate manifests e.g. CRD, RBAC etc.
52
- manifests : controller-gen
83
+ manifests : controller-gen # # Generate manifests, e.g. CRD, RBAC, etc.
53
84
$(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role paths=" ./..." output:crd:artifacts:config=" config/crd/bases"
54
85
cd api; $(CONTROLLER_GEN ) $(CRD_OPTIONS ) rbac:roleName=manager-role paths=" ./..." output:crd:artifacts:config=" ../config/crd/bases"
55
86
56
- # Generate API reference documentation
57
- api-docs : gen-crd-api-reference-docs
87
+ api-docs : gen-crd-api-reference-docs # # Generate API reference documentation
58
88
$(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
59
89
60
- # Run go mod tidy
61
- tidy :
90
+ tidy : # # Run go mod tidy
62
91
go mod tidy
63
92
cd api; go mod tidy
64
93
65
- # Run go fmt against code
66
- fmt :
94
+ fmt : # # Run go fmt against code
67
95
go fmt ./...
68
96
cd api; go fmt ./...
69
97
70
- # Run go vet against code
71
- vet :
98
+ vet : # # Run go vet against code
72
99
go vet ./...
73
100
cd api; go vet ./...
74
101
75
- # Generate code
76
- generate : controller-gen
102
+ generate : controller-gen # # Generate API code
77
103
cd api; $(CONTROLLER_GEN ) object:headerFile=" ../hack/boilerplate.go.txt" paths=" ./..."
78
104
79
- # Build the docker image
80
- docker-build :
105
+ docker-build : # # Build the docker image
81
106
docker build . -t ${IMG}
82
107
83
- # Push the docker image
84
- docker-push :
108
+ docker-push : # # Push docker image
85
109
docker push ${IMG}
86
110
87
- # Find or download controller-gen
88
- controller-gen :
111
+ $(LIBGIT2_SHARED_BUILD ) : $(LIBGIT2_SHARED_DIR )
112
+ (cd $( LIBGIT2_SHARED_DIR) && cmake -DBUILD_SHARED_LIBS:BOOL=ON .. && cmake --build .)
113
+
114
+ $(LIBGIT2_STATIC_BUILD ) : $(LIBGIT2_STATIC_DIR )
115
+ (cd $( LIBGIT2_STATIC_DIR) && cmake -DBUILD_SHARED_LIBS:BOOL=OFF .. && cmake --build .)
116
+
117
+ $(LIBGIT2_SHARED_DIR ) :
118
+ mkdir -p " $@ "
119
+
120
+ $(LIBGIT2_STATIC_DIR ) :
121
+ mkdir -p " $@ "
122
+
123
+ .PHONY : clean
124
+ clean : # # Removes dependency builds and clears Go cache
125
+ rm -rf $(LIBGIT2_SHARED_DIR )
126
+ rm -rf $(LIBGIT2_STATIC_DIR )
127
+
128
+ # C-binding directives in Go are cached, which means that e.g.
129
+ # changes to $PKG_CONFIG_PATH do not have an effect until this cache
130
+ # is cleared and the package(s) is forced to be rebuild.
131
+ # This can also be done using `go <cmd> -a`, but this would make
132
+ # things slow for something that is not expected to change much,
133
+ # unless you are specifically dealing with build related changes.
134
+ go clean
135
+
136
+ controller-gen : # # Find or download controller-gen
89
137
ifeq (, $(shell which controller-gen) )
90
138
@{ \
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 ; \
139
+ set -e; \
140
+ CONTROLLER_GEN_TMP_DIR=$$(mktemp -d); \
141
+ cd $$CONTROLLER_GEN_TMP_DIR; \
142
+ go mod init tmp; \
143
+ go get sigs.k8s.io/controller-tools/cmd/controller-gen@$(CONTROLLER_GEN_VERSION); \
144
+ rm -rf $$CONTROLLER_GEN_TMP_DIR; \
97
145
}
98
146
CONTROLLER_GEN =$(GOBIN ) /controller-gen
99
147
else
100
148
CONTROLLER_GEN =$(shell which controller-gen)
101
149
endif
102
150
103
- # Find or download gen-crd-api-reference-docs
104
- gen-crd-api-reference-docs :
151
+ gen-crd-api-reference-docs : # # Find or download gen-crd-api-reference-docs
105
152
ifeq (, $(shell which gen-crd-api-reference-docs) )
106
153
@{ \
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 ; \
154
+ set -e; \
155
+ API_REF_GEN_TMP_DIR=$$(mktemp -d); \
156
+ cd $$API_REF_GEN_TMP_DIR; \
157
+ go mod init tmp; \
158
+ go get github.com/ahmetb/gen-crd-api-reference-docs@$(GEN_API_REF_DOCS_VERSION); \
159
+ rm -rf $$API_REF_GEN_TMP_DIR; \
113
160
}
114
161
API_REF_GEN =$(GOBIN ) /gen-crd-api-reference-docs
115
162
else
116
163
API_REF_GEN =$(shell which gen-crd-api-reference-docs)
117
164
endif
118
165
119
- # Find or download setup-envtest
120
- setup-envtest :
166
+ setup-envtest : # # Find or download setup-envtest
121
167
ifeq (, $(shell which setup-envtest) )
122
168
@{ \
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 ; \
169
+ set -e; \
170
+ SETUP_ENVTEST_TMP_DIR=$$(mktemp -d); \
171
+ cd $$SETUP_ENVTEST_TMP_DIR; \
172
+ go mod init tmp; \
173
+ go get sigs.k8s.io/controller-runtime/tools/setup-envtest@latest; \
174
+ rm -rf $$SETUP_ENVTEST_TMP_DIR; \
129
175
}
130
176
SETUP_ENVTEST =$(GOBIN ) /setup-envtest
131
177
else
132
178
SETUP_ENVTEST =$(shell which setup-envtest)
133
179
endif
180
+
181
+ .PHONY : help
182
+ help : # # Display this help menu.
183
+ @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