Zion Boggan
repos/Drophawk/Makefile
zionboggan.com ↗
129 lines · text
History for this file →
1
# DropHawk - Makefile
2
# Implements every target listed in CLAUDE.md.
3
# Requires: docker compose v2, cargo, pnpm, uv
4
 
5
COMPOSE     := docker compose --env-file .env
6
COMPOSE_ALL := $(COMPOSE) -f docker-compose.yml -f docker-compose.prod.yml
7
 
8
# ─── Core lifecycle ────────────────────────────────────────────────────────────
9
 
10
.PHONY: up
11
up:  ## Bring up all services (dev mode - no resource limits)
12
	$(COMPOSE) up -d
13
	@echo "Services starting. Run 'make health' in ~30s to verify."
14
 
15
.PHONY: down
16
down:  ## Tear down all services (preserves volumes)
17
	$(COMPOSE) down
18
 
19
.PHONY: up-prod
20
up-prod:  ## Bring up with homelab prod overrides (resource limits, unless-stopped)
21
	$(COMPOSE_ALL) up -d
22
 
23
.PHONY: logs
24
logs:  ## Tail logs for all services
25
	$(COMPOSE) logs -f
26
 
27
.PHONY: logs-%
28
logs-%:  ## Tail logs for a specific service: make logs-backend
29
	$(COMPOSE) logs -f $*
30
 
31
# ─── Quality gate ──────────────────────────────────────────────────────────────
32
 
33
.PHONY: check
34
check: check-backend check-scrapers check-frontend  ## Run ALL linters + tests (must pass before merge)
35
 
36
.PHONY: check-backend
37
check-backend:  ## Rust: clippy + fmt + tests
38
	cd backend && cargo clippy -- -D warnings
39
	cd backend && cargo fmt --check
40
	cd backend && cargo test --all
41
 
42
.PHONY: check-scrapers
43
check-scrapers:  ## Python: ruff + mypy + pytest
44
	cd scrapers && uv run ruff check .
45
	cd scrapers && uv run ruff format --check .
46
	cd scrapers && uv run mypy . --ignore-missing-imports
47
	cd scrapers && uv run pytest --cov=scrapers --cov-fail-under=75
48
 
49
.PHONY: check-frontend
50
check-frontend:  ## TypeScript: tsc + eslint + vitest
51
	cd frontend && pnpm typecheck
52
	cd frontend && pnpm lint
53
	cd frontend && pnpm test
54
 
55
.PHONY: e2e
56
e2e:  ## Playwright e2e (needs running stack)
57
	cd frontend && pnpm test:e2e
58
 
59
# ─── Database ──────────────────────────────────────────────────────────────────
60
 
61
.PHONY: migrate
62
migrate:  ## Run sqlx migrations against $DATABASE_URL
63
	cd backend && cargo sqlx migrate run --database-url "$${DATABASE_URL}"
64
 
65
.PHONY: seed
66
seed:  ## Apply seed migrations (sources table initial data)
67
	$(COMPOSE) exec -T backend sqlx migrate run --database-url "$${DATABASE_URL}" \
68
		|| cargo sqlx migrate run --database-url "$${DATABASE_URL}"
69
 
70
.PHONY: psql
71
psql:  ## Open psql shell inside postgres container
72
	$(COMPOSE) exec postgres psql -U $${POSTGRES_USER:-drophawk} -d $${POSTGRES_DB:-drophawk}
73
 
74
# ─── Cache & messaging ────────────────────────────────────────────────────────
75
 
76
.PHONY: redis-cli
77
redis-cli:  ## Open redis-cli inside redis container
78
	$(COMPOSE) exec redis redis-cli -a "$${REDIS_PASSWORD}"
79
 
80
.PHONY: nats-sub
81
nats-sub:  ## Subscribe to all NATS subjects (requires nats CLI in image)
82
	$(COMPOSE) exec nats nats sub '>' \
83
		--server nats://localhost:4222 \
84
		--user "$${NATS_USER:-drophawk}" \
85
		--password "$${NATS_PASSWORD}"
86
 
87
# ─── Operations ───────────────────────────────────────────────────────────────
88
 
89
.PHONY: health
90
health:  ## Check health of every service
91
	@bash scripts/healthcheck.sh
92
 
93
.PHONY: backup
94
backup:  ## Run pg_dump backup now
95
	@bash infra/backup/pg-backup.sh
96
 
97
.PHONY: bench
98
bench:  ## Run Rust benchmarks + Playwright load test
99
	cd backend && cargo bench
100
	cd frontend && pnpm test:e2e
101
 
102
# ─── Dev helpers ──────────────────────────────────────────────────────────────
103
 
104
.PHONY: dev
105
dev:  ## Start infra deps only, then start backend + frontend locally
106
	@bash scripts/dev-up.sh
107
 
108
.PHONY: build
109
build:  ## Build all Docker images
110
	$(COMPOSE) build
111
 
112
.PHONY: pull
113
pull:  ## Pull latest pinned images
114
	$(COMPOSE) pull
115
 
116
.PHONY: ps
117
ps:  ## Show container status
118
	$(COMPOSE) ps
119
 
120
.PHONY: restart-%
121
restart-%:  ## Restart a specific service: make restart-backend
122
	$(COMPOSE) restart $*
123
 
124
.PHONY: help
125
help:  ## Show this help
126
	@grep -E '^[a-zA-Z_%-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
127
		awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-20s\033[0m %s\n", $$1, $$2}' | sort
128
 
129
.DEFAULT_GOAL := help