Backend (Go): - Config: CORS, RabbitMQ, rate limit, main config updates - Routes: core, distribution, tracks routing changes - Middleware: rate limiter, endpoint limiter, response cache hardening - Handlers: distribution, search handler fixes - Workers: job worker improvements - Upload validator and logging config additions - New migrations: products, orders, performance indexes - Seed tooling and data Stream Server (Rust): - Audio processing, config, routes, simple stream server updates - Dockerfile improvements Infrastructure: - docker-compose.yml updates - nginx-rtmp config changes - Makefile improvements (config, dev, high, infra) - Root package.json and lock file updates - .env.example updates Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
119 lines
7.1 KiB
Makefile
119 lines
7.1 KiB
Makefile
# ==============================================================================
|
|
# DEVELOPMENT (local run with optional hot reload)
|
|
# ==============================================================================
|
|
# dev: Backend API (Docker from infra-up) + Web only. Chat/Stream Rust servers
|
|
# are skipped until veza-common is fixed. Use dev-full to start everything.
|
|
# ==============================================================================
|
|
|
|
.PHONY: dev dev-full dev-backend dev-web dev-backend-api dev-e2e dev-stream-server
|
|
.PHONY: stop-local-services start-local-service stop-local-service
|
|
|
|
dev: infra-up-dev ## [HIGH] Start Backend (Go local) + Web (Vite) — everything you need
|
|
@$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING DEV (Backend + Web)${NC}"
|
|
@# Kill any existing backend/frontend processes to free ports
|
|
@kill $$(lsof -ti:$(PORT_backend-api)) 2>/dev/null || true
|
|
@kill $$(lsof -ti:$(PORT_web)) 2>/dev/null || true
|
|
@sleep 1
|
|
@$(ECHO_CMD) " Backend: http://$(APP_DOMAIN):$(PORT_backend-api)"
|
|
@$(ECHO_CMD) " Web: http://$(APP_DOMAIN):$(PORT_web)"
|
|
@$(ECHO_CMD) "${YELLOW}Hit Ctrl+C to stop.${NC}"
|
|
@(trap 'kill 0' SIGINT; \
|
|
if command -v air >/dev/null; then \
|
|
$(ECHO_CMD) "${GREEN}[Go] Hot Reload Active (Air)${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & \
|
|
else \
|
|
$(ECHO_CMD) "${GREEN}[Go] Starting...${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & \
|
|
fi; \
|
|
sleep 5; \
|
|
$(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}" && cd $(ROOT)/$(SERVICE_DIR_web) && PORT=$(PORT_web) npm run dev & \
|
|
wait)
|
|
|
|
dev-full-docker: check-ports infra-up ## [HIGH] Start full stack in Docker (Backend, Stream, ClamAV) — then run make dev-web
|
|
@$(ECHO_CMD) "${GREEN}✅ Full stack (Docker) started. Run 'make dev-web' for the frontend.${NC}"
|
|
@$(ECHO_CMD) " Backend: http://$(APP_DOMAIN):$(PORT_backend-api)"
|
|
@$(ECHO_CMD) " Stream: http://$(APP_DOMAIN):$(PORT_STREAM)"
|
|
|
|
dev-full: check-ports infra-up-dev ## [HIGH] Start Everything inc. Stream (Rust) — infra from docker-compose.dev.yml, apps local with hot reload
|
|
@$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING HYBRID DEV ENVIRONMENT (full)${NC}"
|
|
@$(ECHO_CMD) " Go: http://$(APP_DOMAIN):$(PORT_backend-api)"
|
|
@$(ECHO_CMD) " Stream: http://$(APP_DOMAIN):$(PORT_stream-server)"
|
|
@$(ECHO_CMD) " Web: http://$(APP_DOMAIN):$(PORT_web)"
|
|
@$(ECHO_CMD) "${YELLOW}Hit Ctrl+C to stop all.${NC}"
|
|
@(trap 'kill 0' SIGINT; \
|
|
if command -v air >/dev/null; then \
|
|
$(ECHO_CMD) "${GREEN}[Go] Hot Reload Active (Air)${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & \
|
|
else \
|
|
$(ECHO_CMD) "${YELLOW}[Go] Standard Run${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & \
|
|
fi; \
|
|
if command -v cargo-watch >/dev/null; then \
|
|
$(ECHO_CMD) "${GREEN}[Stream] Hot Reload Active${NC}" && cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & \
|
|
else \
|
|
$(ECHO_CMD) "${YELLOW}[Stream] Standard Run${NC}" && cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & \
|
|
fi; \
|
|
$(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}" && cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev & \
|
|
wait)
|
|
|
|
dev-backend: check-ports infra-up-dev ## [MID] Start Backends Only (Hot Reload supported) — infra from docker-compose.dev.yml
|
|
@$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING BACKEND ONLY${NC}"
|
|
@(trap 'kill 0' SIGINT; \
|
|
if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & fi; \
|
|
if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & fi; \
|
|
wait)
|
|
|
|
dev-web: check-ports infra-up ## [MID] Start Web app only (assumes backend elsewhere or mocked)
|
|
@$(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}"
|
|
@cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev
|
|
|
|
dev-backend-api: check-ports infra-up-dev ## [MID] Start Go backend only — infra from docker-compose.dev.yml
|
|
@$(ECHO_CMD) "${GREEN}[Backend API] Starting...${NC}"
|
|
@if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air; else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go; fi
|
|
|
|
dev-e2e: infra-up-dev ## [HIGH] Start Backend + Web with rate limiting disabled for E2E tests
|
|
@$(ECHO_CMD) "${BOLD}${PURPLE}🚀 STARTING E2E DEV (rate limiting OFF)${NC}"
|
|
@# Kill any existing backend/frontend processes to free ports
|
|
@kill $$(lsof -ti:$(PORT_backend-api)) 2>/dev/null || true
|
|
@kill $$(lsof -ti:$(PORT_web)) 2>/dev/null || true
|
|
@sleep 1
|
|
@$(ECHO_CMD) " Backend: http://$(APP_DOMAIN):$(PORT_backend-api) (APP_ENV=test, rate limit OFF)"
|
|
@$(ECHO_CMD) " Web: http://$(APP_DOMAIN):$(PORT_web)"
|
|
@$(ECHO_CMD) "${YELLOW}Hit Ctrl+C to stop. Then run: npm run e2e${NC}"
|
|
@(trap 'kill 0' SIGINT; \
|
|
export DISABLE_RATE_LIMIT_FOR_TESTS=true; \
|
|
export APP_ENV=test; \
|
|
if command -v air >/dev/null; then \
|
|
$(ECHO_CMD) "${GREEN}[Go] Hot Reload Active (Air) — rate limit OFF${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & \
|
|
else \
|
|
$(ECHO_CMD) "${GREEN}[Go] Starting — rate limit OFF${NC}" && cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & \
|
|
fi; \
|
|
sleep 5; \
|
|
$(ECHO_CMD) "${GREEN}[Web] Starting Vite...${NC}" && cd $(ROOT)/$(SERVICE_DIR_web) && PORT=$(PORT_web) npm run dev & \
|
|
wait)
|
|
|
|
dev-stream-server: check-ports infra-up-dev ## [MID] Start Stream server only — infra from docker-compose.dev.yml
|
|
@$(ECHO_CMD) "${GREEN}[Stream] Starting...${NC}"
|
|
@if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q; else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q; fi
|
|
|
|
stop-local-services: ## [LOW] Stop all local processes (air, cargo watch, vite)
|
|
@pkill -f "air\|cargo watch\|npm run dev\|go run.*cmd/api" 2>/dev/null || true
|
|
|
|
start-local-service: ## [LOW] Start a service locally (usage: make start-local-service SERVICE=backend-api)
|
|
@if [ -z "$(SERVICE)" ]; then $(ECHO_CMD) "${RED}❌ Please specify SERVICE=name${NC}"; exit 1; fi
|
|
@$(ECHO_CMD) "${BLUE}🚀 Starting $(SERVICE)...${NC}"
|
|
@case "$(SERVICE)" in \
|
|
backend-api) \
|
|
if command -v air >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_backend-api) && air & else cd $(ROOT)/$(SERVICE_DIR_backend-api) && go run cmd/api/main.go & fi ;; \
|
|
stream-server) \
|
|
if command -v cargo-watch >/dev/null; then cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo watch -x run -q & else cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo run -q & fi ;; \
|
|
web) \
|
|
cd $(ROOT)/$(SERVICE_DIR_web) && npm run dev & ;; \
|
|
*) \
|
|
$(ECHO_CMD) "${RED}Unknown service: $(SERVICE)${NC}"; exit 1 ;; \
|
|
esac
|
|
|
|
stop-local-service: ## [LOW] Stop a local service (usage: make stop-local-service SERVICE=backend-api)
|
|
@if [ -z "$(SERVICE)" ]; then $(ECHO_CMD) "${RED}❌ Please specify SERVICE=name${NC}"; exit 1; fi
|
|
@case "$(SERVICE)" in \
|
|
backend-api) pkill -f "air\|go run.*cmd/api" 2>/dev/null || true ;; \
|
|
stream-server) pkill -f "cargo.*$(SERVICE)" 2>/dev/null || true ;; \
|
|
web) pkill -f "npm run dev\|vite" 2>/dev/null || true ;; \
|
|
*) $(ECHO_CMD) "${RED}Unknown service: $(SERVICE)${NC}" ;; \
|
|
esac
|