-
Notifications
You must be signed in to change notification settings - Fork 13
/
Makefile
307 lines (219 loc) · 10.5 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
GOFILES := $(shell find . -name '*.go' -not -path "./vendor/*" | grep -v pkg/toolkit/app/http/handler/dashboard/genstatic/gen.go | grep -v pkg/http/handler/swagger/genstatic/gen.go | egrep -v "^\./\.go" | grep -v _test.go)
PACKAGES ?= $(shell go list ./... | grep -Fv -e tests -e testutils -e genstatic -e mock -e integration-test )
INTEGRATION_TEST_PACKAGES ?= $(shell go list ./... | grep integration-tests )
ORCH_SERVICES = tx-sender tx-listener api
ORCH_MIGRATE = api
DEPS_VAULT = vault vault-agent
DEPS_POSTGRES = postgres
DEPS_KAFKA = zookeeper kafka
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
OPEN = xdg-open
VEGETA_BIN_URL = https://github.com/tsenart/vegeta/releases/download/v12.8.4/vegeta_12.8.4_linux_amd64.tar.gz
endif
ifeq ($(UNAME_S),Darwin)
OPEN = open
VEGETA_BIN_URL = https://github.com/tsenart/vegeta/releases/download/v12.8.4/vegeta_12.8.4_darwin_amd64.tar.gz
endif
.PHONY: all run-coverage coverage fmt fmt-check vet lint misspell-check misspell race tools help
networks:
@docker network create --driver=bridge --subnet=172.16.239.0/24 orchestrate_besu || true
@docker network create --driver=bridge --subnet=172.16.238.0/24 orchestrate_go_quorum || true
@docker network create orchestrate_geth || true
run-unit:
@mkdir -p build/coverage
@go test -cover -coverpkg=./... -covermode=count -coverprofile build/coverage/unit.out --tags unit ${PACKAGES}
run-coverage-unit: run-unit
@sh scripts/coverage.sh build/coverage/unit.out build/coverage/unit.html
coverage-unit: run-coverage-unit
@$(OPEN) build/coverage/unit.html 2>/dev/null
ci-run-coverage-unit:
@mkdir -p build/coverage
@go test -cover -coverpkg=./... -covermode=set -coverprofile build/coverage/unit.out --tags unit ${PACKAGES}
@sh scripts/coverage.sh build/coverage/unit.out build/coverage/unit.html
run-race: ## Run data race detector
@go test -count=1 -race -tags unit -short ${PACKAGES}
run-integration:
@mkdir -p build/coverage
@go test -cover -coverpkg=./... -covermode=count -coverprofile build/coverage/integration.out -count=1 -v --tags integration ${INTEGRATION_TEST_PACKAGES}
run-coverage-integration: run-integration
@sh scripts/coverage.sh build/coverage/integration.out build/coverage/integration.html
coverage-integration: run-coverage-integration
@$(OPEN) build/coverage/integration.html 2>/dev/null
mod-tidy: ## Run deps cleanup
@go mod tidy
lint: ## Run linter to fix issues
@misspell -w $(GOFILES)
@golangci-lint run --fix
lint-ci: ## Check linting
@misspell -error $(GOFILES)
@golangci-lint run
run-e2e: gobuild-e2e
@rm -f build/report/report.html
@docker-compose -f docker-compose.e2e.yml up -V e2e
@docker-compose -f docker-compose.e2e.yml up --build report
e2e: run-e2e
@$(OPEN) build/report/report.html 2>/dev/null
run-stress: gobuild-stress
@docker-compose -f docker-compose.e2e.yml up -V stress
e2e-ci: gobuild-e2e
@docker network create orchestrate
@docker-compose -f docker-compose.e2e.yml up -V e2e
@docker-compose -f docker-compose.e2e.yml up --build report
deploy-remote-env:
@bash ./scripts/deploy-remote-env.sh
stress-ci: gobuild-stress
@docker network create orchestrate
@docker-compose -f docker-compose.e2e.yml up -V stress
clean: protobuf gen-swagger gen-mocks mod-tidy lint coverage ## Run all clean-up tasks
gen-mocks:
@go generate -run mockgen ./...
gen-swagger:
@go generate github.com/consensys/orchestrate/services/api/service/controllers
serve-swagger: gen-swagger
@swagger serve -F=swagger ./public/swagger-specs/services/api/swagger.json
gen-deepcopy:
@bash scripts/deepcopy/generate.sh
# Tools
lint-tools: ## Install linting tools
@GO111MODULE=on go get github.com/client9/misspell/cmd/misspell@v0.3.4
@curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $$(go env GOPATH)/bin v1.27.0
vegeta-tools:
@curl -sSfL $(VEGETA_BIN_URL) -o /tmp/vegeta.tar.gz
@sudo tar -xvf /tmp/vegeta.tar.gz -C /usr/local/bin/ vegeta
tools: lint-tools vegeta-tools## Install test tools
go install github.com/golang/mock/mockgen@v1.4.3
go install github.com/swaggo/swag/cmd/swag@v1.7.8
# Help
help: ## Display this help screen
@grep -h -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
gen-help: gobuild ## Generate Command Help file
@mkdir -p build/cmd
@for cmd in $(ORCH_SERVICES); do \
./build/bin/orchestrate help $$cmd run | tail -n +3 | head -n -2 > build/cmd/$$cmd-run.txt; \
done
@for cmd in $(ORCH_MIGRATE); do \
./build/bin/orchestrate help $$cmd migrate | tail -n +3 | head -n -2 > build/cmd/$$cmd-migrate.txt; \
done
gen-help-docker: docker-build ## Generate Command Help file using docker
@mkdir -p build/cmd
@for cmd in $(ORCH_SERVICES); do \
docker run orchestrate help $$cmd run | tail -n +3 | head -n -3 > build/cmd/$$cmd-run.txt; \
done
@for cmd in $(ORCH_MIGRATE); do \
docker run orchestrate help $$cmd migrate | tail -n +3 | head -n -3 > build/cmd/$$cmd-migrate.txt; \
done
# Protobuf
protobuf: ## Generate protobuf stubs
@docker-compose -f scripts/protobuf/docker-compose.yml up --build
topics: ## Create kafka topics
@bash scripts/deps/kafka/initTopics.sh
gobuild: ## Build Orchestrate Go binary
@CGO_ENABLED=0 go build -o ./build/bin/orchestrate
gobuild-dbg:
CGO_ENABLED=1 go build -gcflags=all="-N -l" -o ./build/bin/orchestrate
docker-build: ## Build Orchestrate Docker image
@DOCKER_BUILDKIT=1 docker build -t orchestrate .
bootstrap: ## Wait for dependencies to be ready
@bash scripts/bootstrap.sh
bootstrap-deps: bootstrap ## Wait for dependencies to be ready
@bash scripts/bootstrap-deps.sh
gobuild-e2e: ## Build Orchestrate e2e Docker image
@CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./build/bin/e2e ./tests/cmd
gobuild-stress: ## Build Orchestrate stress binary
@CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o ./build/bin/stress ./tests/cmd
orchestrate: gobuild ## Start Orchestrate
@docker-compose -f docker-compose.dev.yml up --force-recreate --build -d $(ORCH_SERVICES)
ci-orchestrate:
@docker-compose -f docker-compose.dev.yml up -d $(ORCH_SERVICES)
stop-orchestrate: ## Stop Orchestrate
@docker-compose -f docker-compose.dev.yml stop $(ORCH_SERVICES)
down-orchestrate:## Down Orchestrate
@docker-compose -f docker-compose.dev.yml down --volumes --timeout 0
deps-postgres:
@docker-compose -f scripts/deps/docker-compose.yml up --build -d $(DEPS_POSTGRES)
deps-redis:
@docker-compose -f scripts/deps/docker-compose.yml up --build -d redis
deps-vault:
@docker-compose -f scripts/deps/docker-compose.yml up --build -d $(DEPS_VAULT)
deps-kafka:
@docker-compose -f scripts/deps/docker-compose.yml up --build -d $(DEPS_KAFKA)
quorum-key-manager:
@bash scripts/deps/quorum-key-manager/wait_for_token.sh
@docker-compose -f scripts/deps/docker-compose.yml up --build -d quorum-key-manager
deps-persistent: networks deps-vault deps-postgres deps-redis
deps: networks deps-persistent deps-kafka quorum-key-manager
down-deps:
@docker-compose -f scripts/deps/docker-compose.yml down --volumes --timeout 0
geth:
@docker-compose -f scripts/geth/docker-compose.yml up -d
stop-geth:
@docker-compose -f scripts/geth/docker-compose.yml stop
down-geth:
@docker-compose -f scripts/geth/docker-compose.yml down --volumes --timeout 0
go-quorum:
@docker-compose -f scripts/go-quorum/docker-compose.yml up -d
stop-go-quorum:
@docker-compose -f scripts/go-quorum/docker-compose.yml stop
down-go-quorum:
@docker-compose -f scripts/go-quorum/docker-compose.yml down --volumes --timeout 0
besu:
@docker-compose -f scripts/besu/docker-compose.yml up -d
stop-besu:
@docker-compose -f scripts/besu/docker-compose.yml stop
down-besu:
@docker-compose -f scripts/besu/docker-compose.yml down --volumes --timeout 0
up: networks deps-persistent go-quorum besu geth deps-kafka quorum-key-manager bootstrap-deps orchestrate ## Start Orchestrate and deps
dev: deps orchestrate ## Start Orchestrate and light deps
geth-dev: deps geth orchestrate ## Start Orchestrate and light deps
besu-dev: deps besu orchestrate ## Start Orchestrate and light besu deps
go-quorum-dev: deps go-quorum orchestrate ## Start Orchestrate and light go-quorum deps
remote-dev: deps-persistent orchestrate
down: down-orchestrate down-go-quorum down-geth down-besu down-deps ## Down Orchestrate and deps
up-ci: deps-persistent go-quorum geth besu deps-kafka bootstrap-deps topics ci-orchestrate ## Start Orchestrate and deps
up-azure: deps-persistent go-quorum geth besu bootstrap orchestrate ## Start Blockchain and Orchestrate to be connect to Azure Event Hub
hashicorp-accounts:
@bash scripts/deps/hashicorp/vault.sh kv list secret/default
hashicorp-token-lookup:
@bash scripts/deps/hashicorp/vault.sh token lookup
hashicorp-vault:
@bash scripts/deps/hashicorp/vault.sh $(COMMAND)
pgadmin:
@docker-compose -f scripts/deps/docker-compose-tools.yml up -d pgadmin
down-pgadmin:
@docker-compose -f scripts/deps/docker-compose-tools.yml rm --force -s -v pgadmin
efk:
@docker-compose -f scripts/deps/docker-compose-efk.yml up -d
down-efk:
@docker-compose -f scripts/deps/docker-compose-efk.yml down --volumes --timeout 0
ifeq (restart,$(firstword $(MAKECMDGOALS)))
CMD_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
ifeq ($(CMD_ARGS),)
CMD_ARGS := $(ORCH_SERVICES)
endif
$(eval $(CMD_ARGS):;@:)
endif
restart: gobuild
@docker-compose stop $(CMD_ARGS) && docker-compose start $(CMD_ARGS)
redisinsight:
@docker-compose -f scripts/deps/docker-compose-tools.yml up -d redisinsight
down-redisinsight:
@docker-compose -f scripts/deps/docker-compose-tools.yml rm --force -s -v redisinsight
up-all: efk pgadmin redisinsight up
down-all: down-efk down-pgadmin down-redisinsight down
observability:
@docker-compose -f scripts/deps/docker-compose-tools.yml up -d prometheus grafana
down-observability:
@docker-compose -f scripts/deps/docker-compose-tools.yml rm --force -s -v prometheus grafana
nginx:
@docker-compose -f scripts/deps/docker-compose-tools.yml up -d nginx nginx-prometheus-exporter
down-nginx:
@docker-compose -f scripts/deps/docker-compose-tools.yml rm --force -s -v nginx nginx-prometheus-exporter
vegeta:
@mkdir -p build/vegeta
@envsubst < scripts/vegeta/test | vegeta attack -format=http -duration=30s -rate=200/s | tee build/vegeta/results.bin | vegeta report
@vegeta report -type=json build/vegeta/results.bin > build/vegeta/metrics.json
@cat build/vegeta/results.bin | vegeta plot > build/vegeta/plot.html
@cat build/vegeta/results.bin | vegeta report -type="hist[0,100ms,200ms,300ms,500ms]"
@set +e
@$(OPEN) build/vegeta/plot.html || true 2>/dev/null