veza/make/tools.mk
2026-03-05 19:35:57 +01:00

95 lines
5 KiB
Makefile

# ==============================================================================
# TOOLS: check, install deps, ports, doctor
# ==============================================================================
.PHONY: check-tools check-tools-incus install-tools install-deps check-ports openapi doctor
doctor: ## [HIGH] Verify all dependencies and environment (TASK-QA-008)
@$(ECHO_CMD) "${BOLD}${PURPLE}🔬 VEZA Doctor — Environment Check${NC}"
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}Runtime versions:${NC}"
@if [ -f $(ROOT)/.nvmrc ]; then \
expected=$$(cat $(ROOT)/.nvmrc); \
actual=$$(node -v 2>/dev/null || echo "not installed"); \
if command -v node >/dev/null 2>&1; then \
$(ECHO_CMD) " Node.js: $$actual (expected: v$$expected)"; \
else \
$(ECHO_CMD) " ${RED}Node.js: not installed${NC}"; \
fi; \
else \
$(ECHO_CMD) " Node.js: $$(node -v 2>/dev/null || echo 'not installed')"; \
fi
@$(ECHO_CMD) " Go: $$(go version 2>/dev/null || echo 'not installed')"
@$(ECHO_CMD) " Rust: $$(rustc --version 2>/dev/null || echo 'not installed')"
@$(ECHO_CMD) " Docker: $$(docker --version 2>/dev/null || echo 'not installed')"
@$(ECHO_CMD) " Compose: $$(docker compose version 2>/dev/null || echo 'not installed')"
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}Optional (hot reload):${NC}"
@command -v air >/dev/null 2>&1 && $(ECHO_CMD) " air: $(GREEN)${NC}" || $(ECHO_CMD) " air: $(YELLOW)not installed (run make install-tools)${NC}"
@command -v cargo-watch >/dev/null 2>&1 && $(ECHO_CMD) " cargo-watch: $(GREEN)${NC}" || $(ECHO_CMD) " cargo-watch: $(YELLOW)not installed (run make install-tools)${NC}"
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}Environment validation (scripts/validate-env.sh):${NC}"
@(cd $(ROOT) && ./scripts/validate-env.sh development) || true
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}Env quick check:${NC}"
@$(ECHO_CMD) " DATABASE_URL: $${DATABASE_URL:-(not set)}"
@$(ECHO_CMD) " REDIS_URL: $${REDIS_URL:-(not set)}"
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${BOLD}Infra connectivity (requires infra-up):${NC}"
@if docker compose -f $(COMPOSE_FILE) exec -T postgres pg_isready -U $(DB_USER) 2>/dev/null; then \
$(ECHO_CMD) " Postgres: $(GREEN)✓ reachable${NC}"; \
else \
$(ECHO_CMD) " Postgres: $(YELLOW)not reachable (run make infra-up)${NC}"; \
fi
@if docker compose -f $(COMPOSE_FILE) exec -T redis redis-cli ping 2>/dev/null | grep -q PONG; then \
$(ECHO_CMD) " Redis: $(GREEN)✓ reachable${NC}"; \
else \
$(ECHO_CMD) " Redis: $(YELLOW)not reachable (run make infra-up)${NC}"; \
fi
@$(ECHO_CMD) ""
@$(ECHO_CMD) "${GREEN}Run 'make install-deps' to install code dependencies.${NC}"
check-tools: ## [LOW] Check required tools
@$(ECHO_CMD) "${BLUE}Checking core requirements...${NC}"
@for tool in docker go cargo npm; do \
command -v $$tool >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}$$tool is missing!${NC}"; exit 1; }; \
done
@$(ECHO_CMD) "${GREEN}✅ All tools present.${NC}"
check-tools-incus: ## [LOW] Check required tools for Incus deployment
@$(ECHO_CMD) "${BLUE}Checking Incus deployment requirements...${NC}"
@command -v incus >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ incus is missing! Install with: sudo snap install incus${NC}"; exit 1; }
@command -v go >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ go is missing!${NC}"; exit 1; }
@command -v cargo >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ cargo is missing!${NC}"; exit 1; }
@command -v npm >/dev/null 2>&1 || { $(ECHO_CMD) "${RED}❌ npm is missing!${NC}"; exit 1; }
@$(ECHO_CMD) "${GREEN}✅ All Incus tools present.${NC}"
install-tools: ## [LOW] Install Power User tools (Hot Reload, Linters)
@$(ECHO_CMD) "${BLUE}🛠️ Installing Dev Tools...${NC}"
@command -v air >/dev/null 2>&1 || go install github.com/air-verse/air@latest
@command -v cargo-watch >/dev/null 2>&1 || cargo install cargo-watch
@command -v sqlx >/dev/null 2>&1 || cargo install sqlx-cli --no-default-features --features native-tls,postgres
@$(ECHO_CMD) "${GREEN}✅ Tools installed.${NC}"
install-deps: ## [LOW] Install code dependencies (all backends + npm workspaces)
@$(ECHO_CMD) "${BLUE}📦 Installing dependencies...${NC}"
@$(ECHO_CMD) " -> [Go] Downloading modules..."
@(cd $(ROOT)/$(SERVICE_DIR_backend-api) && go mod download)
@$(ECHO_CMD) " -> [Rust Stream] Fetching crates..."
@(cd $(ROOT)/$(SERVICE_DIR_stream-server) && cargo fetch)
@$(ECHO_CMD) " -> [Web] Installing npm packages..."
@(cd $(ROOT)/$(SERVICE_DIR_web) && npm install --silent)
@$(ECHO_CMD) "${GREEN}✅ Dependencies installed.${NC}"
check-ports: ## [LOW] Check if ports are available
@$(ECHO_CMD) "${BLUE}🔍 Checking ports...${NC}"
@for port in $(PORT_backend-api) $(PORT_stream-server) $(PORT_web); do \
if lsof -i :$$port -t >/dev/null 2>&1; then \
$(ECHO_CMD) "${YELLOW}⚠️ Port $$port is busy${NC}"; \
else \
$(ECHO_CMD) "${GREEN}✅ Port $$port is free${NC}"; \
fi; \
done
openapi: ## [LOW] Régénère openapi.yaml depuis les annotations Swagger (v0.923)
@$(MAKE) -C $(ROOT)/$(SERVICE_DIR_backend-api) openapi