validops-east-1's picture
sure
6cd5bf4
Raw
History Blame Contribute Delete
9.06 kB
.PHONY: help dev run build test clean swagger deps docker-build docker-run install setup migrate-up migrate-down logs
# Configurações
APP_NAME=agentdeck-whatsapp
MAIN_PATH=cmd/agentdeck-whatsapp-service/main.go
BUILD_DIR=build
GO=go
VERSION=$(shell cat VERSION 2>/dev/null || echo "0.7.2")
LDFLAGS=-ldflags "-X main.version=$(VERSION)"
GOFLAGS=-v
# Cores para output
GREEN=\033[0;32m
YELLOW=\033[0;33m
RED=\033[0;31m
NC=\033[0m # No Color
##@ Ajuda
help: ## Exibe esta mensagem de ajuda
@echo "$(GREEN)AgentDeck Whatsapp Service - Makefile$(NC)"
@echo ""
@awk 'BEGIN {FS = ":.*##"; printf "\nUso:\n make $(YELLOW)<target>$(NC)\n"} /^[a-zA-Z_-]+:.*?##/ { printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2 } /^##@/ { printf "\n$(YELLOW)%s$(NC)\n", substr($$0, 5) } ' $(MAKEFILE_LIST)
##@ Desenvolvimento
dev: ## Roda a aplicação em modo desenvolvimento
@echo "$(GREEN)🚀 Rodando AgentDeck Whatsapp Service em modo desenvolvimento...$(NC)"
$(GO) run $(LDFLAGS) $(MAIN_PATH) -dev
run: ## Roda a aplicação em modo produção
@echo "$(GREEN)🚀 Rodando AgentDeck Whatsapp Service...$(NC)"
$(GO) run $(MAIN_PATH)
watch: ## Roda a aplicação com hot reload (requer air)
@if command -v air > /dev/null; then \
echo "$(GREEN)🔥 Rodando com hot reload...$(NC)"; \
air; \
else \
echo "$(RED)❌ Air não instalado. Instale com: go install github.com/cosmtrek/air@latest$(NC)"; \
exit 1; \
fi
##@ Build
build: ## Compila a aplicação
@echo "$(GREEN)🔨 Compilando $(APP_NAME)...$(NC)"
@mkdir -p $(BUILD_DIR)
$(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME) $(MAIN_PATH)
@echo "$(GREEN)✅ Build completo: $(BUILD_DIR)/$(APP_NAME)$(NC)"
build-linux: ## Compila para Linux
@echo "$(GREEN)🔨 Compilando para Linux...$(NC)"
@mkdir -p $(BUILD_DIR)
GOOS=linux GOARCH=amd64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME)-linux-amd64 $(MAIN_PATH)
@echo "$(GREEN)✅ Build Linux completo$(NC)"
build-windows: ## Compila para Windows
@echo "$(GREEN)🔨 Compilando para Windows...$(NC)"
@mkdir -p $(BUILD_DIR)
GOOS=windows GOARCH=amd64 $(GO) build $(GOFLAGS) $(LDFLAGS) -o $(BUILD_DIR)/$(APP_NAME)-windows-amd64.exe $(MAIN_PATH)
@echo "$(GREEN)✅ Build Windows completo$(NC)"
build-all: build build-linux build-windows ## Compila para todas as plataformas
@echo "$(GREEN)✅ Todos os builds completos$(NC)"
install: build ## Compila e instala no GOPATH
@echo "$(GREEN)📦 Instalando $(APP_NAME)...$(NC)"
$(GO) install $(MAIN_PATH)
@echo "$(GREEN)✅ Instalado com sucesso$(NC)"
##@ Testes
test: ## Roda todos os testes
@echo "$(GREEN)🧪 Rodando testes...$(NC)"
$(GO) test -v ./...
test-coverage: ## Roda testes com cobertura
@echo "$(GREEN)🧪 Rodando testes com cobertura...$(NC)"
$(GO) test -v -coverprofile=coverage.out ./...
$(GO) tool cover -html=coverage.out -o coverage.html
@echo "$(GREEN)✅ Cobertura gerada: coverage.html$(NC)"
test-race: ## Roda testes verificando race conditions
@echo "$(GREEN)🧪 Rodando testes com race detector...$(NC)"
$(GO) test -race -v ./...
bench: ## Roda benchmarks
@echo "$(GREEN)⚡ Rodando benchmarks...$(NC)"
$(GO) test -bench=. -benchmem ./...
##@ Dependências
deps: ## Instala dependências
@echo "$(GREEN)📦 Instalando dependências...$(NC)"
$(GO) mod download
$(GO) mod verify
@echo "$(GREEN)✅ Dependências instaladas$(NC)"
deps-update: ## Atualiza dependências
@echo "$(GREEN)📦 Atualizando dependências...$(NC)"
$(GO) get -u ./...
$(GO) mod tidy
@echo "$(GREEN)✅ Dependências atualizadas$(NC)"
deps-clean: ## Limpa dependências não utilizadas
@echo "$(GREEN)🧹 Limpando dependências...$(NC)"
$(GO) mod tidy
@echo "$(GREEN)✅ Dependências limpas$(NC)"
deps-reset: ## Limpa cache e reinstala dependências (força uso do código local)
@echo "$(GREEN)🔄 Resetando dependências e cache...$(NC)"
@echo "$(YELLOW)Limpeza de cache e módulos...$(NC)"
$(GO) clean -cache -modcache -i -r
@echo "$(YELLOW)Download de módulos...$(NC)"
$(GO) mod download
@echo "$(YELLOW)Organizando módulos...$(NC)"
$(GO) mod tidy
@echo "$(GREEN)✅ Dependências resetadas e atualizadas$(NC)"
##@ Documentação
swagger: ## Gera documentação Swagger
@echo "$(GREEN)📚 Gerando documentação Swagger...$(NC)"
@if command -v swag > /dev/null; then \
swag init -g $(MAIN_PATH) -o ./docs; \
echo "$(GREEN)✅ Swagger gerado com sucesso$(NC)"; \
else \
echo "$(RED)❌ Swag não instalado. Instale com: go install github.com/swaggo/swag/cmd/swag@latest$(NC)"; \
exit 1; \
fi
docs: ## Abre a documentação local
@echo "$(GREEN)📖 Abrindo documentação...$(NC)"
@if [ -f "docs/wiki/README.md" ]; then \
echo "Documentação disponível em: docs/wiki/README.md"; \
else \
echo "$(RED)❌ Documentação não encontrada$(NC)"; \
fi
##@ Database
migrate-up: ## Executa migrations do banco de dados
@echo "$(GREEN)🗃️ Executando migrations...$(NC)"
@if [ -d "migrations" ]; then \
$(GO) run $(MAIN_PATH) migrate up; \
else \
echo "$(YELLOW)⚠️ Diretório migrations não encontrado$(NC)"; \
fi
migrate-down: ## Reverte migrations do banco de dados
@echo "$(YELLOW)⚠️ Revertendo migrations...$(NC)"
@if [ -d "migrations" ]; then \
$(GO) run $(MAIN_PATH) migrate down; \
else \
echo "$(YELLOW)⚠️ Diretório migrations não encontrado$(NC)"; \
fi
##@ Docker
docker-build: ## Build da imagem Docker
@echo "$(GREEN)🐳 Construindo imagem Docker...$(NC)"
docker build --build-arg VERSION=$(VERSION) -t $(APP_NAME):latest .
@echo "$(GREEN)✅ Imagem Docker construída$(NC)"
docker-run: ## Roda container Docker
@echo "$(GREEN)🐳 Iniciando container...$(NC)"
docker run -p 4000:4000 --env-file .env $(APP_NAME):latest
docker-compose-up: ## Sobe todos os serviços com docker-compose
@echo "$(GREEN)🐳 Iniciando serviços com docker-compose...$(NC)"
docker-compose up -d
docker-compose-down: ## Para todos os serviços do docker-compose
@echo "$(YELLOW)🐳 Parando serviços...$(NC)"
docker-compose down
docker-compose-logs: ## Exibe logs do docker-compose
docker-compose logs -f
##@ Linting e Formatação
fmt: ## Formata o código
@echo "$(GREEN)✨ Formatando código...$(NC)"
$(GO) fmt ./...
@echo "$(GREEN)✅ Código formatado$(NC)"
lint: ## Executa linter (requer golangci-lint)
@echo "$(GREEN)🔍 Executando linter...$(NC)"
@if command -v golangci-lint > /dev/null; then \
golangci-lint run ./...; \
echo "$(GREEN)✅ Lint completo$(NC)"; \
else \
echo "$(RED)❌ golangci-lint não instalado. Instale com: go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest$(NC)"; \
exit 1; \
fi
vet: ## Executa go vet
@echo "$(GREEN)🔍 Executando go vet...$(NC)"
$(GO) vet ./...
@echo "$(GREEN)✅ Vet completo$(NC)"
check: fmt vet lint test ## Executa todas as verificações
##@ Limpeza
clean: ## Remove arquivos de build
@echo "$(YELLOW)🧹 Limpando arquivos de build...$(NC)"
@rm -rf $(BUILD_DIR)
@rm -f coverage.out coverage.html
@echo "$(GREEN)✅ Limpeza completa$(NC)"
clean-all: clean ## Remove arquivos de build e cache
@echo "$(YELLOW)🧹 Limpeza completa (incluindo cache)...$(NC)"
$(GO) clean -cache -testcache -modcache
@echo "$(GREEN)✅ Limpeza completa$(NC)"
##@ Utilitários
setup: deps swagger ## Setup completo do ambiente de desenvolvimento
@echo "$(GREEN)🎉 Setup completo!$(NC)"
@echo ""
@echo "Para começar a desenvolver, rode:"
@echo " $(YELLOW)make dev$(NC)"
@echo ""
@echo "Outros comandos úteis:"
@echo " $(YELLOW)make help$(NC) - Ver todos os comandos"
@echo " $(YELLOW)make test$(NC) - Rodar testes"
@echo " $(YELLOW)make build$(NC) - Compilar a aplicação"
logs: ## Exibe logs da aplicação (se estiver rodando)
@echo "$(GREEN)📋 Exibindo logs...$(NC)"
@if [ -f "logs/app.log" ]; then \
tail -f logs/app.log; \
else \
echo "$(YELLOW)⚠️ Arquivo de log não encontrado$(NC)"; \
fi
version: ## Exibe versão do Go e dependências
@echo "$(GREEN)📌 Versões:$(NC)"
@$(GO) version
@echo ""
@echo "$(GREEN)Dependências principais:$(NC)"
@$(GO) list -m all | grep -E '(whatsmeow|postgres|minio)'
status: ## Verifica status da aplicação
@echo "$(GREEN)🔍 Verificando status...$(NC)"
@curl -s http://localhost:4000/health || echo "$(RED)❌ Aplicação não está rodando$(NC)"
##@ Desenvolvimento Avançado
profile-cpu: ## Profile de CPU (requer aplicação rodando)
@echo "$(GREEN)📊 Capturando profile de CPU...$(NC)"
curl http://localhost:4000/debug/pprof/profile?seconds=30 > cpu.prof
$(GO) tool pprof -http=:8231 cpu.prof
profile-mem: ## Profile de memória (requer aplicação rodando)
@echo "$(GREEN)📊 Capturando profile de memória...$(NC)"
curl http://localhost:4000/debug/pprof/heap > mem.prof
$(GO) tool pprof -http=:8231 mem.prof
generate: ## Roda go generate
@echo "$(GREEN)⚙️ Executando go generate...$(NC)"
$(GO) generate ./...
mod-graph: ## Exibe gráfico de dependências
@echo "$(GREEN)📊 Gráfico de dependências:$(NC)"
$(GO) mod graph