-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
144 lines (115 loc) · 4.43 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
# Директория для бинарных файлов
BIN_DIR := ./bin
# Имя итогового бинарного файла
BINARY_NAME := $(BIN_DIR)/usdt-rate-service
# Параметры сборки
GOOS := $(shell go env GOOS)
GOARCH := $(shell go env GOARCH)
# Tools переменные
TOOL_BIN_DIR := $(BIN_DIR)/tools
GOBIN := $(abspath $(TOOL_BIN_DIR))
export GOBIN
TOOL_LINT_SRC := github.com/golangci/golangci-lint/cmd/golangci-lint@latest
TOOL_LINT := $(TOOL_BIN_DIR)/golangci-lint
TOOL_GO_IMPORTS_SRC := golang.org/x/tools/cmd/goimports@latest
TOOL_GO_IMPORTS := $(TOOL_BIN_DIR)/goimports
TOOL_GOFUMPT_SRC := mvdan.cc/gofumpt@latest
TOOL_GOFUMPT := $(TOOL_BIN_DIR)/gofumpt
TOOL_PROTO_SRC := google.golang.org/protobuf/cmd/[email protected]
TOOL_PROTO := $(TOOL_BIN_DIR)/protoc-gen-go
TOOL_GRPC_SRC := google.golang.org/grpc/cmd/[email protected]
TOOL_GRPC := $(TOOL_BIN_DIR)/protoc-gen-go-grpc
TOOL_MOCKS_SRC := github.com/vektra/mockery/[email protected]
# Настройки контейнера
DOCKER_IMAGE := usdt-rate-service
DOCKER_COMPOSE_FILE := deploy/docker-compose/docker-compose.yaml
# Флаги для golangci-lint
LINT_FLAGS := --timeout=5m
# Работа с файлами proto
PROTO_PATH := schemas/proto/grpc
PROTO_OUT := internal/generated/grpc/usdt_rate
# База данных
DB_URL := postgres://usdt-rate-service:usdt-rate-service@localhost:5432/usdt-rate-service?sslmode=disable
# Установка инструментов
tools-install:
@echo '>>> Run install tools'
@rm -rf $(TOOL_BIN_DIR)
@mkdir -p $(TOOL_BIN_DIR)
@echo "GOBIN: $(GOBIN)"
@GOBIN=$(GOBIN) go install $(TOOL_LINT_SRC)
@GOBIN=$(GOBIN) go install $(TOOL_GO_IMPORTS_SRC)
@GOBIN=$(GOBIN) go install $(TOOL_GOFUMPT_SRC)
@GOBIN=$(GOBIN) go install $(TOOL_PROTO_SRC)
@GOBIN=$(GOBIN) go install $(TOOL_GRPC_SRC)
@GOBIN=$(GOBIN) go install $(TOOL_MOCKS_SRC)
# Запуск go mod tidy
go-tidy:
@echo '>>> Run go get ./..'
@go get -x ./...
@echo '>>> Run go tidy'
@go mod tidy
# Запуск линтера
lint:
@echo '>>> Run lint'
@$(TOOL_LINT) run --fix
# Форматирование кода
fmt:
@echo ">>> Run Code Formatter"
@go fmt $(shell go list ./... | grep -v /vendor)
@$(TOOL_GOFUMPT) -l -w .
@$(TOOL_GO_IMPORTS) -w .
# Сборка бинарного файла
build:
@echo ">>> Building binary..."
@mkdir -p bin # Создаем папку bin, если она не существует
@go build -o $(BINARY_NAME) ./cmd/service/main.go
@echo ">>> Binary saved to $(BINARY_NAME)"
# Запуск тестов
test:
@echo ">>> Go test ./..."
@go test ./... -v -cover
# Генерация кода
generate: generate-go generate-proto fmt
# Генерация Go-кода
generate-go:
@echo ">>> Go generate ./..."
@PATH=$(TOOL_BIN_DIR):$$PATH go generate ./...
# Команда для генерации кода из .proto файлов
generate-proto:
@echo ">>> Generate proto"
@protoc --go_out=$(PROTO_OUT) --go-grpc_out=$(PROTO_OUT) \
--go_opt=paths=source_relative \
--go-grpc_opt=paths=source_relative \
-I=$(PROTO_PATH) $(PROTO_PATH)/usdt_rate_service.proto
# Запуск контейнеров с приложением и БД
docker-run:
@echo ">>> Docker compose up"
@docker compose --env-file .env --file $(DOCKER_COMPOSE_FILE) up --build
# Команда для остановки приложения через docker-compose
docker-down:
@echo ">>> Docker compose down"
@docker compose --file $(DOCKER_COMPOSE_FILE) down
# Запуск контейнеров только с БД
docker-infra:
@echo ">>> Docker compose up postgres"
@docker compose --env-file .env --file $(DOCKER_COMPOSE_FILE) up postgres
# Применение миграций
migrate-up:
@echo ">>> Migrates up"
@goose -dir db/migrations postgres $(DB_URL) up
# Откат миграций
migrate-down:
@echo ">>> Migrates down"
@goose -dir db/migrations postgres $(DB_URL) down
# Удаление скомпилированных файлов
clean: clean-bin clean-proto
# Удаление скомпилированного бинарного файла
clean-bin:
@echo ">>> Removing binary..."
@rm -f $(BINARY_NAME)
@echo ">>> Binary removed from $(BINARY_NAME)"
# Удаление скомпилированных proto-файлов
clean-proto:
rm -rf $(PROTO_OUT)/*.pb.go
# Псевдонимы для удобства
.PHONY: tools-install go-tidy lint fmt generate generate-go generate-proto docker-run docker-down