# visionA monorepo dev convenience Makefile # # 對應文件: # - docs/DEV-SETUP.md(完整 dev 環境流程,含 OAuth client 註冊) # - docker-compose.dev.yml(dev all-in-one:postgres + member-center + visiona-backend) # - .autoflow/04-architecture/oidc-tdd.md §12 # # 子專案 Makefile(不在這裡 wrap,請進子目錄使用): # - visionA-backend/Makefile — go build / docker-compose prod / 單元測試 # - local-agent/Makefile — wails build(Agent 桌面端) # - local-tool/ — 離線版桌面工具(獨立子專案) # # 設計原則: # 1. dev 環境用 docker compose 一鍵啟動 backend + DB + Member Center(OIDC provider) # 2. frontend 仍用 host pnpm dev(HMR 體驗較好,不放 compose) # 3. dev-reset 是核選項,會清掉 DB volume,慎用 # # ⚠️ 此 Makefile 僅供 dev 使用,production 走 visionA-backend/docker/docker-compose.yml + IaC。 COMPOSE_FILE := docker-compose.dev.yml COMPOSE := docker compose -f $(COMPOSE_FILE) ENV_FILE := .env.dev ENV_EXAMPLE := .env.dev.example FRONTEND_DIR := visionA-frontend .DEFAULT_GOAL := help .PHONY: help dev-up dev-down dev-logs dev-status dev-reset dev-rebuild \ frontend-dev backend-dev clean check-env # --------------------------------------------------------------------------- # Help # --------------------------------------------------------------------------- help: @echo "visionA Dev Commands:" @echo "" @echo " make dev-up # 起 dev 環境(postgres + member-center + visiona-backend)" @echo " make dev-down # 停 dev 環境(保留 DB volume)" @echo " make dev-reset # 停 dev 環境並清掉 DB volume(從零重來,慎用)" @echo " make dev-rebuild # 重 build images 並重啟(程式碼改動後用)" @echo " make dev-logs # 跟蹤 dev 環境 logs(tail=50, follow)" @echo " make dev-status # 看 dev 環境 service 狀態" @echo "" @echo " make frontend-dev # 起 frontend dev server(pnpm dev,host)" @echo "" @echo " make clean # 清掉所有 build artifact(不含 docker volumes)" @echo "" @echo "完整流程(含 OAuth client 手動註冊)見 docs/DEV-SETUP.md" # --------------------------------------------------------------------------- # dev environment(docker compose) # --------------------------------------------------------------------------- # 確保 .env.dev 存在;不存在則從範本複製並提示使用者編輯 check-env: @if [ ! -f $(ENV_FILE) ]; then \ echo ">>> 未找到 $(ENV_FILE),從 $(ENV_EXAMPLE) 複製一份..."; \ cp $(ENV_EXAMPLE) $(ENV_FILE); \ echo ""; \ echo " 已建立 $(ENV_FILE)(預設 VISIONA_AUTH_TYPE=static,可立刻起來跑)"; \ echo " 要切到 OIDC 模式:請依 docs/DEV-SETUP.md §5 註冊 OAuth client,"; \ echo " 把 client_id/secret 填入 $(ENV_FILE),並改 VISIONA_AUTH_TYPE=oidc 後重啟。"; \ echo ""; \ fi dev-up: check-env $(COMPOSE) --env-file $(ENV_FILE) up -d @echo "" @echo ">>> 等 service 起動..." @sleep 3 @$(COMPOSE) ps @echo "" @echo ">>> 啟動完成。下一步:" @echo " 1. 等所有 service healthy:watch -n 2 'docker compose -f $(COMPOSE_FILE) ps'" @echo " 2. 起 frontend: make frontend-dev" @echo " 3. 開瀏覽器: http://localhost:3000" @echo " (首次需手動註冊 OAuth client,見 docs/DEV-SETUP.md §5)" dev-down: $(COMPOSE) down dev-reset: @echo "⚠️ 將清掉所有 dev DB volume(pgdata + api-storage),無法復原。" @printf "確定?(y/N) "; read ans; if [ "$$ans" != "y" ] && [ "$$ans" != "Y" ]; then echo "取消"; exit 1; fi $(COMPOSE) down -v @echo "✓ Dev 環境已清掉(含 DB volume)" dev-rebuild: check-env $(COMPOSE) --env-file $(ENV_FILE) up -d --build @$(COMPOSE) ps dev-logs: $(COMPOSE) logs -f --tail=50 dev-status: $(COMPOSE) ps # --------------------------------------------------------------------------- # frontend(host,不在 compose 內) # --------------------------------------------------------------------------- frontend-dev: cd $(FRONTEND_DIR) && pnpm install && pnpm dev # --------------------------------------------------------------------------- # clean # --------------------------------------------------------------------------- clean: -cd visionA-backend && $(MAKE) clean 2>/dev/null || true -cd local-agent && $(MAKE) clean 2>/dev/null || true -cd $(FRONTEND_DIR) && rm -rf .next out node_modules @echo "✓ build artifact 已清除(docker volumes 不受影響,請另用 make dev-reset)"