@@ -7,25 +7,39 @@ DEV_COMPOSE := docker compose -f deploy/compose/control-plane.dev.yml
77
88# ── Development ──────────────────────────────────────────────
99
10- dev : # # Start backend + frontend (requires PostgreSQL running )
10+ dev : # # Start backend + frontend (auto-starts PostgreSQL if needed )
1111 @echo " Starting control-plane + admin frontend..."
1212 @echo " API → http://$( CONTROL_PLANE_ADDR) "
1313 @echo " Web → http://localhost:5173"
1414 @echo " Agent → embedded (in-process)"
1515 @echo " "
1616 @mkdir -p .data
17- @trap ' kill 0' EXIT; \
18- HOST_AGENT_MODE=embedded DATA_DIR=$(CURDIR ) /.data go run ./cmd/control-plane & \
19- cd web/admin && pnpm dev & \
17+ @# Auto-start PostgreSQL if not running
18+ @nc -z 127.0.0.1 $(POSTGRES_PORT ) > /dev/null 2>&1 || \
19+ { echo " PostgreSQL not running, starting it now..." ; $( MAKE) db; }
20+ @# On macOS / Windows, ensure gateway sidecar image exists (ContainerProxyProvider needs it)
21+ @if [ " $$ (uname -s)" != " Linux" ]; then \
22+ if ! docker images $( GATEWAY_IMAGE) --format ' {{.Repository}}:{{.Tag}}' 2> /dev/null | grep -qF ' $(GATEWAY_IMAGE)' ; then \
23+ echo " Non-Linux host: gateway image not found, building $( GATEWAY_IMAGE) ..." ; \
24+ $(MAKE ) gateway-image; \
25+ fi ; \
26+ fi
27+ @trap ' kill $$CP_PID $$VITE_PID 2>/dev/null; wait' INT EXIT; \
28+ bash scripts/dev-backend.sh & CP_PID=$$ ! ; \
29+ cd web/admin && pnpm dev & VITE_PID=$$ ! ; \
2030 wait
2131
22- dev-api : # # Start backend only ( with embedded host-agent )
32+ dev-api : # # Start backend only with hot reload (auto-starts PostgreSQL )
2333 @mkdir -p .data
24- HOST_AGENT_MODE=embedded DATA_DIR=$(CURDIR ) /.data go run ./cmd/control-plane
34+ @nc -z 127.0.0.1 $(POSTGRES_PORT ) > /dev/null 2>&1 || \
35+ { echo " PostgreSQL not running, starting it now..." ; $( MAKE) db; }
36+ @bash scripts/dev-backend.sh
2537
2638dev-web : # # Start frontend only
2739 cd web/admin && pnpm dev
2840
41+ dev-all : dev # # Alias for 'make dev' (PostgreSQL is auto-started)
42+
2943# ── Database ─────────────────────────────────────────────────
3044
3145db : # # Start PostgreSQL via Docker Compose
@@ -54,13 +68,15 @@ test-smoke: ## Run BATS bootstrap smoke tests
5468# ── Images ────────────────────────────────────────────────────
5569
5670MANAGED_USER_TAG := $(shell grep '^image_name:' deploy/docker/managed-user/image.lock | cut -d' ' -f2)
71+ GATEWAY_IMAGE := cloud-cli-proxy-sing-gateway:local
5772
5873user-image : # # Build managed-user image (cloud desktop)
5974 docker build -t $(MANAGED_USER_TAG ) -f deploy/docker/managed-user/Dockerfile .
6075 @echo " Built: $( MANAGED_USER_TAG) "
6176
6277gateway-image : # # Build sing-box + iptables sidecar (required for macOS/Windows host-agent egress)
63- docker build -t cloud-cli-proxy-sing-gateway:local -f deploy/docker/sing-box-gateway/Dockerfile .
78+ docker build -t $(GATEWAY_IMAGE ) -f deploy/docker/sing-box-gateway/Dockerfile .
79+ @echo " Built: $( GATEWAY_IMAGE) "
6480
6581# ── Build ────────────────────────────────────────────────────
6682
@@ -117,8 +133,14 @@ release: ## Create and push release tag (usage make release VERSION=1.5.0)
117133setup : # # First-time setup: install deps, copy .env
118134 cd web/admin && pnpm install
119135 @test -f .env || cp .env.example .env
120- @echo " Done. Edit .env if needed, then run: make db && make dev"
121- @echo " 提示:在 macOS/Windows 上调试主机出口代理(sidecar 网关)前请先执行一次: make gateway-image"
136+ @echo " Done. Edit .env if needed, then run: make dev"
137+ @echo " "
138+ @echo " 常用命令:"
139+ @echo " make dev 一键启动 PostgreSQL + 后端 + 前端(推荐)"
140+ @echo " make dev-api 只启动后端(自动启动 PostgreSQL)"
141+ @echo " make dev-web 只启动前端"
142+ @echo " make db 只启动 PostgreSQL"
143+ @echo " make gateway-image 构建网关 sidecar 镜像(非 Linux 首次需执行)"
122144
123145# ── Utilities ────────────────────────────────────────────────
124146
0 commit comments