2026-02-07 19:36:48 +00:00
|
|
|
# ==============================================================================
|
2026-03-05 18:35:57 +00:00
|
|
|
# TOOLS: check, install deps, ports, doctor
|
2026-02-07 19:36:48 +00:00
|
|
|
# ==============================================================================
|
|
|
|
|
|
2026-03-05 18:35:57 +00:00
|
|
|
.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}"
|
2026-02-07 19:36:48 +00:00
|
|
|
|
|
|
|
|
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}"
|
2026-02-27 08:43:25 +00:00
|
|
|
@for port in $(PORT_backend-api) $(PORT_stream-server) $(PORT_web); do \
|
2026-02-07 19:36:48 +00:00
|
|
|
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
|
2026-02-27 19:23:10 +00:00
|
|
|
|
|
|
|
|
openapi: ## [LOW] Régénère openapi.yaml depuis les annotations Swagger (v0.923)
|
|
|
|
|
@$(MAKE) -C $(ROOT)/$(SERVICE_DIR_backend-api) openapi
|