-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathMakefile
More file actions
executable file
·147 lines (118 loc) · 5.17 KB
/
Makefile
File metadata and controls
executable file
·147 lines (118 loc) · 5.17 KB
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
API_CONTAINER_NAME=pynews-server
.PHONY: help build up down logs test lint format clean dev prod restart health
# Colors for terminal output
GREEN=\033[0;32m
YELLOW=\033[1;33m
NC=\033[0m # No Color
help: ## Mostra esta mensagem de ajuda
@echo "$(YELLOW)PyNews Server - Comandos Disponíveis:$(NC)"
@echo ""
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " $(GREEN)%-15s$(NC) %s\n", $$1, $$2}'
install: ## Instala dependências com Poetry
@echo "$(YELLOW)Instalando dependências...$(NC)"
poetry install
build: ## Constrói as imagens Docker
@echo "$(YELLOW)Construindo imagens Docker...$(NC)"
docker-compose build
up: ## Inicia os serviços
@echo "$(YELLOW)Iniciando serviços...$(NC)"
docker-compose up -d
down: ## Para os serviços
@echo "$(YELLOW)Parando serviços...$(NC)"
docker-compose down
logs: ## Mostra os logs dos serviços
docker-compose logs -f pynews-api
restart: ## Reinicia os serviços
@echo "$(YELLOW)Reiniciando serviços...$(NC)"
docker-compose restart
dev: build up ## Ambiente de desenvolvimento completo
@echo "$(GREEN)Ambiente de desenvolvimento iniciado!$(NC)"
@echo "API: http://localhost:8000"
@echo "Docs: http://localhost:8000/docs"
prod: ## Inicia em modo produção
@echo "$(YELLOW)Iniciando em modo produção...$(NC)"
docker-compose -f docker-compose.yaml up -d
test: ## Executa os testes
@echo "$(YELLOW)Executando testes...$(NC)"
poetry run pytest
test-cov: ## Executa os testes com coverage
@echo "$(YELLOW)Executando testes com coverage...$(NC)"
poetry run pytest --cov=app --cov-report=html
docker-test:
docker exec -e PYTHONPATH=/app $(API_CONTAINER_NAME) pytest -s --cov-report=term-missing --cov-report html --cov-report=xml --cov=app tests/
scanapi-test: # Executa testes com scanapi e gera report acessado na porta 8080 no path {url}/scanapi-report.html
docker-compose run --rm scanapi-tests
lint: ## Verifica o código com ruff
@echo "$(YELLOW)Verificando código...$(NC)"
poetry run ruff check .
format: ## Formata o código
@echo "$(YELLOW)Formatando código...$(NC)"
poetry run ruff format .
health: ## Verifica o health check da API
@echo "$(YELLOW)Verificando saúde da API...$(NC)"
curl -f http://localhost:8000/api/healthcheck || echo "API não está respondendo"
db-backup: ## Cria backup do banco SQLite
@echo "$(YELLOW)Criando backup do banco...$(NC)"
@if [ -f "./data/pynewsdb.db" ]; then \
cp ./data/pynewsdb.db ./data/pynewsdb.db.backup-$(shell date +%Y%m%d_%H%M%S); \
echo "$(GREEN)Backup criado com sucesso!$(NC)"; \
else \
echo "Banco de dados não encontrado em ./data/pynewsdb.db"; \
fi
db-restore: ## Restaura backup do banco SQLite (usar: make db-restore BACKUP=filename)
@echo "$(YELLOW)Restaurando backup do banco...$(NC)"
@if [ -z "$(BACKUP)" ]; then \
echo "Use: make db-restore BACKUP=filename"; \
exit 1; \
fi
@if [ -f "./data/$(BACKUP)" ]; then \
cp ./data/$(BACKUP) ./data/pynewsdb.db; \
echo "$(GREEN)Backup restaurado com sucesso!$(NC)"; \
else \
echo "Arquivo de backup não encontrado: ./data/$(BACKUP)"; \
fi
db-reset: ## Remove o banco SQLite (será recriado na próxima execução)
@echo "$(YELLOW)Removendo banco de dados...$(NC)"
@if [ -f "./data/pynewsdb.db" ]; then \
rm ./data/pynewsdb.db; \
echo "$(GREEN)Banco removido. Será recriado na próxima execução.$(NC)"; \
else \
echo "Banco de dados não encontrado em ./data/pynewsdb.db"; \
fi
db-shell: ## Abre shell SQLite para interagir com o banco
@echo "$(YELLOW)Abrindo shell SQLite...$(NC)"
@if [ -f "./data/pynewsdb.db" ]; then \
sqlite3 ./data/pynewsdb.db; \
else \
echo "Banco de dados não encontrado em ./data/pynewsdb.db"; \
fi
install: ## Instala dependências com Poetry
@echo "$(YELLOW)Instalando dependências...$(NC)"
poetry install
shell: ## Entra no shell do container
docker-compose exec pynews-api bash
clean: ## Remove containers, volumes e imagens
@echo "$(YELLOW)Limpando containers e volumes...$(NC)"
docker-compose down -v --remove-orphans
docker system prune -f
setup: install build up ## Setup completo do projeto
@echo "$(GREEN)Setup completo realizado!$(NC)"
@echo "$(GREEN)Acesse: http://localhost:8000/docs$(NC)"
docker/test:
docker exec -e PYTHONPATH=/app $(API_CONTAINER_NAME) pytest -s --cov-report=term-missing --cov-report html --cov-report=xml --cov=app tests/
create-community: ## Cria uma nova comunidade (usar: make create-community NAME=nome EMAIL=email PASSWORD=senha)
@echo "$(YELLOW)Criando nova comunidade...$(NC)"
@if [ -z "$(NAME)" ] || [ -z "$(EMAIL)" ] || [ -z "$(PASSWORD)" ]; then \
echo "Use: make create-community NAME=nome EMAIL=email PASSWORD=senha"; \
exit 1; \
fi
docker exec $(API_CONTAINER_NAME) python scripts/create_community.py "$(NAME)" "$(EMAIL)" "$(PASSWORD)"
@echo "$(GREEN)Comunidade criada com sucesso!$(NC)"
exec-script: ## Executa um script dentro do container (usar: make exec-script SCRIPT=caminho/script.py ARGS="arg1 arg2")
@echo "$(YELLOW)Executando script no container...$(NC)"
@if [ -z "$(SCRIPT)" ]; then \
echo "Use: make exec-script SCRIPT=caminho/script.py ARGS=\"arg1 arg2\""; \
exit 1; \
fi
docker exec $(API_CONTAINER_NAME) python $(SCRIPT) $(ARGS)
@echo "$(GREEN)Script executado!$(NC)"