GOCMD=go GOBUILD=$(GOCMD) build -trimpath -ldflags="-s -w" GOTEST=$(GOCMD) test BASE_BINARY_NAME=datarush GW_BINARY_NAME=$(BASE_BINARY_NAME)-gw MIGRATE_BINARY_NAME=$(BASE_BINARY_NAME)-migrate AUTH_BINARY_NAME=$(BASE_BINARY_NAME)-auth COMPETITION_BINARY_NAME=$(BASE_BINARY_NAME)-competition TASK_BINARY_NAME=$(BASE_BINARY_NAME)-task BINARY_DIR=bin PROTOC=protoc PROTO_DIR=api/proto PROTO_FILE=${PROTO_DIR}/achievements.proto $(PROTO_DIR)/auth.proto $(PROTO_DIR)/competition.proto $(PROTO_DIR)/results.proto $(PROTO_DIR)/review.proto $(PROTO_DIR)/submission.proto $(PROTO_DIR)/task.proto $(PROTO_DIR)/user.proto PROTO_OUT=. .PHONY: install i generate gen generate-gw test build run migrate lint fmt format clean help codegen examples install: $(GOCMD) mod download $(GOCMD) mod tidy i: install generate: $(PROTOC) --version || (echo "protoc not found, install protoc"; exit 1) $(PROTOC) --go_out=$(PROTO_OUT) --go-grpc_out=$(PROTO_OUT) \ $(PROTO_FILE) gen: generate generate-gw: $(PROTOC) --version || (echo "protoc not found, install protoc"; exit 1) $(PROTOC) --grpc-gateway_out=$(PROTO_OUT) --grpc-gateway_opt generate_unbound_methods=true \ $(PROTO_FILE) test: $(GOTEST) ./... build-gw: $(GOBUILD) -o ./$(BINARY_DIR)/$(GW_BINARY_NAME) ./cmd/gw chmod +x ./$(BINARY_DIR)/$(GW_BINARY_NAME) build-migrate: $(GOBUILD) -o ./$(BINARY_DIR)/$(MIGRATE_BINARY_NAME) ./cmd/migrate chmod +x ./$(BINARY_DIR)/$(MIGRATE_BINARY_NAME) build-auth: $(GOBUILD) -o ./$(BINARY_DIR)/$(AUTH_BINARY_NAME) ./cmd/auth chmod +x ./$(BINARY_DIR)/$(AUTH_BINARY_NAME) build-competition: $(GOBUILD) -o ./$(BINARY_DIR)/$(COMPETITION_BINARY_NAME) ./cmd/competition chmod +x ./$(BINARY_DIR)/$(COMPETITION_BINARY_NAME) build-task: $(GOBUILD) -o ./$(BINARY_DIR)/$(TASK_BINARY_NAME) ./cmd/task chmod +x ./$(BINARY_DIR)/$(TASK_BINARY_NAME) build: build-gw build-migrate build-auth build-competition build-task run: ./$(BINARY_DIR)/$(AUTH_BINARY_NAME) & ./$(BINARY_DIR)/$(COMPETITION_BINARY_NAME) & ./$(BINARY_DIR)/$(TASK_BINARY_NAME) & ./$(BINARY_DIR)/$(GW_BINARY_NAME) migrate: build-migrate @cmd=$(word 2,$(MAKECMDGOALS)); \ if [ -z "$$cmd" ]; then \ echo "Usage: make migrate "; \ exit 1; \ fi; \ ./$(BINARY_DIR)/$(MIGRATE_BINARY_NAME) -cmd $$cmd lint: golangci-lint run -c .golangci.yaml ./... fmt: golangci-lint fmt -c .golangci.yaml ./... format: fmt clean: rm -rf bin/* help: @echo "Help:" @echo " install - Install all deps using go mod download" @echo " i" @echo " generate - Generate gRPC code" @echo " gen" @echo " protoc" @echo " test - Run tests" @echo " build - Build all binaries" @echo " run - Run the application" @echo " lint - Run golangci-lint linter" @echo " format - Run golangci-lint formatter" @echo " fmt" @echo " clean - Clean build artifacts" .DEFAULT_GOAL := help %: @: