Skip to content

Commit 61c9766

Browse files
authored
Merge pull request #256 from Nordix/makefile
Make tools, Proto generator updated
2 parents 1068b0d + 0e89e4e commit 61c9766

15 files changed

+1217
-1046
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@
1515
# vendor/
1616

1717
_output/
18+
bin/

Makefile

+113-34
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
2+
.PHONY: default
3+
default: base-image load-balancer proxy tapa ipam nsp ctraffic frontend
4+
5+
############################################################################
6+
# Variables
7+
############################################################################
8+
9+
# Versions
110
VERSION ?= latest
211
VERSION_LOAD_BALANCER ?= $(VERSION)
312
VERSION_PROXY ?= $(VERSION)
@@ -7,26 +16,49 @@ VERSION_NSP ?= $(VERSION)
716
VERSION_CTRAFFIC ?= $(VERSION)
817
VERSION_FRONTEND ?= $(VERSION)
918

19+
# E2E tests
1020
E2E_FOCUS ?= ""
1121
TRAFFIC_GENERATOR_CMD ?= "docker exec -i {trench}"
22+
NAMESPACE ?= red
1223

24+
# Contrainer Registry
1325
REGISTRY ?= localhost:5000/meridio
1426
BASE_IMAGE ?= $(REGISTRY)/base:latest
1527
DEBUG_IMAGE ?= $(REGISTRY)/debug:$(VERSION)
1628

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+
1745
.PHONY: all
1846
all: default
1947

2048
.PHONY: build
2149
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 .
2351
.PHONY: tag
2452
tag:
2553
docker tag $(IMAGE) $(REGISTRY)/$(IMAGE):$(VERSION)
2654
.PHONY: push
2755
push:
2856
docker push $(REGISTRY)/$(IMAGE):$(VERSION)
2957

58+
#############################################################################
59+
# Component (Build, tag, push): base, debug, load-balancer, proxy, tapa, ipam, nsp, ctraffic, frontend
60+
#############################################################################
61+
3062
.PHONY: base-image
3163
base-image:
3264
docker build -t $(BASE_IMAGE) -f ./build/base/Dockerfile .
@@ -37,61 +69,43 @@ debug-image:
3769

3870
.PHONY: load-balancer
3971
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)
4173

4274
.PHONY: proxy
4375
proxy:
44-
VERSION=$(VERSION_PROXY) IMAGE=proxy $(MAKE) build tag push
76+
VERSION=$(VERSION_PROXY) IMAGE=proxy $(MAKE) $(BUILD_STEPS)
4577

4678
.PHONY: tapa
4779
tapa:
48-
VERSION=$(VERSION_TAPA) IMAGE=tapa $(MAKE) build tag push
80+
VERSION=$(VERSION_TAPA) IMAGE=tapa $(MAKE) $(BUILD_STEPS)
4981

5082
.PHONY: ipam
5183
ipam:
52-
VERSION=$(VERSION_IPAM) IMAGE=ipam $(MAKE) build tag push
84+
VERSION=$(VERSION_IPAM) IMAGE=ipam $(MAKE) $(BUILD_STEPS)
5385

5486
.PHONY: nsp
5587
nsp:
56-
VERSION=$(VERSION_NSP) IMAGE=nsp $(MAKE) build tag push
88+
VERSION=$(VERSION_NSP) IMAGE=nsp $(MAKE) $(BUILD_STEPS)
5789

5890
.PHONY: ctraffic
5991
ctraffic:
60-
VERSION=$(VERSION_CTRAFFIC) IMAGE=ctraffic $(MAKE) build tag push
92+
VERSION=$(VERSION_CTRAFFIC) IMAGE=ctraffic $(MAKE) $(BUILD_STEPS)
6193

6294
.PHONY: frontend
6395
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)
8397

84-
.PHONY: default
85-
default: base-image load-balancer proxy tapa ipam nsp ctraffic frontend
98+
#############################################################################
99+
# Testing & Code check
100+
#############################################################################
86101

87102
.PHONY: lint
88-
lint:
89-
golangci-lint run ./...
103+
lint: golangci-lint
104+
$(GOLANGCI_LINT) run ./...
90105

91-
NAMESPACE ?= red
92106
.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}
95109

96110
.PHONY: test
97111
test:
@@ -105,6 +119,71 @@ cover:
105119
.PHONY: check
106120
check: lint test
107121

122+
#############################################################################
123+
# Code generation
124+
#############################################################################
125+
108126
.PHONY: generate
109-
generate:
127+
generate: mockgen
110128
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

Comments
 (0)