1
+
2
+ .PHONY : default
3
+ default : base-image load-balancer proxy tapa ipam nsp ctraffic frontend
4
+
5
+ # ###########################################################################
6
+ # Variables
7
+ # ###########################################################################
8
+
9
+ # Versions
1
10
VERSION ?= latest
2
11
VERSION_LOAD_BALANCER ?= $(VERSION )
3
12
VERSION_PROXY ?= $(VERSION )
@@ -7,26 +16,49 @@ VERSION_NSP ?= $(VERSION)
7
16
VERSION_CTRAFFIC ?= $(VERSION )
8
17
VERSION_FRONTEND ?= $(VERSION )
9
18
19
+ # E2E tests
10
20
E2E_FOCUS ?= ""
11
21
TRAFFIC_GENERATOR_CMD ?= "docker exec -i {trench}"
22
+ NAMESPACE ?= red
12
23
24
+ # Contrainer Registry
13
25
REGISTRY ?= localhost:5000/meridio
14
26
BASE_IMAGE ?= $(REGISTRY ) /base:latest
15
27
DEBUG_IMAGE ?= $(REGISTRY ) /debug:$(VERSION )
16
28
29
+ # Tools
30
+ export PATH := $(shell pwd) /bin:$(PATH )
31
+ GOLANGCI_LINT = $(shell pwd) /bin/golangci-lint
32
+ GINKGO = $(shell pwd) /bin/ginkgo
33
+ MOCKGEN = $(shell pwd) /bin/mockgen
34
+ PROTOC_GEN_GO = $(shell pwd) /bin/protoc-gen-go
35
+ PROTOC_GEN_GO_GRPC = $(shell pwd) /bin/protoc-gen-go-grpc
36
+ PROJECT_DIR := $(shell dirname $(abspath $(lastword $(MAKEFILE_LIST ) ) ) )
37
+
38
+ BUILD_DIR ?= build
39
+ BUILD_STEPS ?= build tag push
40
+
41
+ # ############################################################################
42
+ # Container: Build, tag, push
43
+ # ############################################################################
44
+
17
45
.PHONY : all
18
46
all : default
19
47
20
48
.PHONY : build
21
49
build :
22
- docker build -t $(IMAGE ) --build-arg meridio_version=$(shell git describe --dirty --tags) --build-arg base_image=$(BASE_IMAGE ) -f ./build /$(IMAGE ) /Dockerfile .
50
+ docker build -t $(IMAGE ) --build-arg meridio_version=$(shell git describe --dirty --tags) --build-arg base_image=$(BASE_IMAGE ) -f ./$( BUILD_DIR ) /$(IMAGE ) /Dockerfile .
23
51
.PHONY : tag
24
52
tag :
25
53
docker tag $(IMAGE ) $(REGISTRY ) /$(IMAGE ) :$(VERSION )
26
54
.PHONY : push
27
55
push :
28
56
docker push $(REGISTRY ) /$(IMAGE ) :$(VERSION )
29
57
58
+ # ############################################################################
59
+ # Component (Build, tag, push): base, debug, load-balancer, proxy, tapa, ipam, nsp, ctraffic, frontend
60
+ # ############################################################################
61
+
30
62
.PHONY : base-image
31
63
base-image :
32
64
docker build -t $(BASE_IMAGE ) -f ./build/base/Dockerfile .
@@ -37,61 +69,43 @@ debug-image:
37
69
38
70
.PHONY : load-balancer
39
71
load-balancer :
40
- VERSION=$(VERSION_LOAD_BALANCER ) IMAGE=load-balancer $(MAKE ) build tag push
72
+ VERSION=$(VERSION_LOAD_BALANCER ) IMAGE=load-balancer $(MAKE ) $( BUILD_STEPS )
41
73
42
74
.PHONY : proxy
43
75
proxy :
44
- VERSION=$(VERSION_PROXY ) IMAGE=proxy $(MAKE ) build tag push
76
+ VERSION=$(VERSION_PROXY ) IMAGE=proxy $(MAKE ) $( BUILD_STEPS )
45
77
46
78
.PHONY : tapa
47
79
tapa :
48
- VERSION=$(VERSION_TAPA ) IMAGE=tapa $(MAKE ) build tag push
80
+ VERSION=$(VERSION_TAPA ) IMAGE=tapa $(MAKE ) $( BUILD_STEPS )
49
81
50
82
.PHONY : ipam
51
83
ipam :
52
- VERSION=$(VERSION_IPAM ) IMAGE=ipam $(MAKE ) build tag push
84
+ VERSION=$(VERSION_IPAM ) IMAGE=ipam $(MAKE ) $( BUILD_STEPS )
53
85
54
86
.PHONY : nsp
55
87
nsp :
56
- VERSION=$(VERSION_NSP ) IMAGE=nsp $(MAKE ) build tag push
88
+ VERSION=$(VERSION_NSP ) IMAGE=nsp $(MAKE ) $( BUILD_STEPS )
57
89
58
90
.PHONY : ctraffic
59
91
ctraffic :
60
- VERSION=$(VERSION_CTRAFFIC ) IMAGE=ctraffic $(MAKE ) build tag push
92
+ VERSION=$(VERSION_CTRAFFIC ) IMAGE=ctraffic $(MAKE ) $( BUILD_STEPS )
61
93
62
94
.PHONY : frontend
63
95
frontend :
64
- VERSION=$(VERSION_FRONTEND ) IMAGE=frontend $(MAKE ) build tag push
65
-
66
- .PHONY : ipam-proto
67
- ipam-proto :
68
- protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative api/ipam/** /* .proto
69
-
70
- .PHONY : nsp-proto
71
- nsp-proto :
72
- protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative api/nsp/** /* .proto
73
-
74
- .PHONY : ambassador-proto
75
- ambassador-proto :
76
- protoc --go_out=plugins=grpc:. --go_opt=paths=source_relative api/ambassador/** /* .proto
77
-
78
- .PHONY : proto
79
- proto : ipam-proto nsp-proto ambassador-proto
80
-
81
- .PHONY : clear
82
- clear :
96
+ VERSION=$(VERSION_FRONTEND ) IMAGE=frontend $(MAKE ) $(BUILD_STEPS )
83
97
84
- .PHONY : default
85
- default : base-image load-balancer proxy tapa ipam nsp ctraffic frontend
98
+ # ############################################################################
99
+ # Testing & Code check
100
+ # ############################################################################
86
101
87
102
.PHONY : lint
88
- lint :
89
- golangci-lint run ./...
103
+ lint : golangci-lint
104
+ $( GOLANGCI_LINT ) run ./...
90
105
91
- NAMESPACE ?= red
92
106
.PHONY : e2e
93
- e2e :
94
- ginkgo -v --focus=$(E2E_FOCUS ) ./test/e2e/... -- -traffic-generator-cmd=$(TRAFFIC_GENERATOR_CMD ) -namespace=${NAMESPACE}
107
+ e2e : ginkgo
108
+ $( GINKGO ) -v --focus=$(E2E_FOCUS ) ./test/e2e/... -- -traffic-generator-cmd=$(TRAFFIC_GENERATOR_CMD ) -namespace=${NAMESPACE}
95
109
96
110
.PHONY : test
97
111
test :
@@ -105,6 +119,71 @@ cover:
105
119
.PHONY : check
106
120
check : lint test
107
121
122
+ # ############################################################################
123
+ # Code generation
124
+ # ############################################################################
125
+
108
126
.PHONY : generate
109
- generate :
127
+ generate : mockgen
110
128
go generate ./...
129
+
130
+ .PHONY : ipam-proto
131
+ ipam-proto : proto-compiler
132
+ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative api/ipam/** /* .proto
133
+
134
+ .PHONY : nsp-proto
135
+ nsp-proto : proto-compiler
136
+ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative api/nsp/** /* .proto
137
+
138
+ .PHONY : ambassador-proto
139
+ ambassador-proto : proto-compiler
140
+ protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative api/ambassador/** /* .proto
141
+
142
+ .PHONY : proto
143
+ proto : ipam-proto nsp-proto ambassador-proto
144
+
145
+ # ############################################################################
146
+ # Tools
147
+ # ############################################################################
148
+
149
+ .PHONY : golangci-lint
150
+ golangci-lint :
151
+ $(call go-get-tool,$(GOLANGCI_LINT ) ,github.com/golangci/golangci-lint/cmd/[email protected] )
152
+
153
+ .PHONY : proto-compiler
154
+ proto-compiler : protoc protoc-gen-go protoc-gen-go-grpc
155
+
156
+ .PHONY : protoc
157
+ protoc :
158
+ @if [ ! $( shell which protoc) ]; then\
159
+ echo "Protocol buffer compiler (protoc) must be installed : https://grpc.io/docs/protoc-installation/# install-pre-compiled-binaries-any-os";\
160
+ fi
161
+
162
+ .PHONY : protoc-gen-go
163
+ protoc-gen-go :
164
+ $(call go-get-tool,$(PROTOC_GEN_GO ) ,google.golang.org/protobuf/cmd/[email protected] )
165
+
166
+ .PHONY : protoc-gen-go-grpc
167
+ protoc-gen-go-grpc :
168
+ $(call go-get-tool,$(PROTOC_GEN_GO_GRPC ) ,google.golang.org/grpc/cmd/[email protected] )
169
+
170
+ .PHONY : mockgen
171
+ mockgen :
172
+ $(call go-get-tool,$(MOCKGEN ) ,github.com/golang/mock/[email protected] )
173
+
174
+ .PHONY : ginkgo
175
+ ginkgo :
176
+ $(call go-get-tool,$(GINKGO ) ,github.com/onsi/ginkgo/v2/[email protected] )
177
+
178
+ # go-get-tool will 'go get' any package $2 and install it to $1.
179
+ define go-get-tool
180
+ @[ -f $(1 ) ] || { \
181
+ set -e ;\
182
+ TMP_DIR=$$(mktemp -d ) ;\
183
+ cd $$TMP_DIR ;\
184
+ go mod init tmp ;\
185
+ echo "Downloading $(2 ) " ;\
186
+ GOBIN=$(PROJECT_DIR ) /bin go install $(2 ) ;\
187
+ rm -rf $$TMP_DIR ;\
188
+ }
189
+ endef
0 commit comments