# ============================================================================== # TOOLS: check, install deps, ports # ============================================================================== .PHONY: check-tools check-tools-incus install-tools install-deps check-ports 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