diff --git a/deploy/bioflow_switch_restart.sh b/deploy/bioflow_switch_restart.sh new file mode 100755 index 0000000..2490e63 --- /dev/null +++ b/deploy/bioflow_switch_restart.sh @@ -0,0 +1,91 @@ +#!/bin/bash +# deploy/bioflow_switch_restart.sh —— 切分支后重启生信相关服务并验证 +# +# 背景:QA(8091)/前端(5180)/bioflow_service(8098) 都是「启动时刻」快照, +# 切分支后不重启就会跑旧分支的代码/配置(曾导致「设置面板无生信开关」+ +# 「规划降级」两个问题)。本脚本把「切分支→重启→验证」固化,避免再踩。 +# +# 用法:bash deploy/bioflow_switch_restart.sh [分支名] +# 分支名缺省 feature/bioflow-skill-orchestration +# +# 重启:QA(8091) + bioflow_service(8098) + 前端 vite(5180) +# BFF(8090) 不重启:/api/capabilities 每次请求动态拉 QA registry,QA 重启后自动生效 +# 验证:服务健康 + QA registry 生信能力 + 前端 SettingsPanel 生信三开关 +# +# 关键点(勿删): +# - QA 需 source agent/qa/env/prod.env + 强制 QA_V1_ENABLE_BIOFLOW_AGENT=1(熔断开) +# - 8098 裸启动即可:main.py 已内置 load_dotenv,自动加载 bioflow_service/.env +# - 前端 pkill 用「zh/PlantAI-rag-new/ui/」精确匹配,避免误杀 5181(wjq 仓库) 的 vite +set -uo pipefail + +ROOT="/home/xzq/5090/teamWorkspace/zh/PlantAI-rag-new" +VENV="/home/xzq/5090/teamWorkspace/zh/plantai-rag-new-venv/bin/python" +BRANCH="${1:-feature/bioflow-skill-orchestration}" +PASS=0; FAIL=0 + +ok() { PASS=$((PASS+1)); echo " ✅ $1"; } +bad() { FAIL=$((FAIL+1)); echo " ❌ $1"; } + +echo "======== 1. 切分支 ========" +cd "$ROOT" || { echo "仓库目录不存在: $ROOT"; exit 1; } +git checkout "$BRANCH" || { echo "切分支失败: $BRANCH"; exit 1; } +echo "当前分支: $(git branch --show-current)" + +echo "" +echo "======== 2. 重启 QA (8091) ========" +pkill -f "scripts.qa_v1_1_73_server" 2>/dev/null; sleep 2 +cd "$ROOT/agent/qa" +set -a; source env/prod.env; set +a +export QA_V1_ENABLE_BIOFLOW_AGENT=1 # 生信对话熔断开关,切生信分支必须开 +nohup "$VENV" -m uvicorn scripts.qa_v1_1_73_server:app --host 127.0.0.1 --port 8091 \ + > /tmp/plantai-qa-8091.log 2>&1 < /dev/null & +disown + +echo "" +echo "======== 3. 重启 bioflow_service (8098) ========" +pkill -f "app.main:app.*port 8098" 2>/dev/null; sleep 2 +cd "$ROOT/bioflow_service" +nohup "$VENV" -m uvicorn app.main:app --host 127.0.0.1 --port 8098 \ + > /tmp/plantai-bioflow-8098.log 2>&1 < /dev/null & +disown + +echo "" +echo "======== 4. 重启前端 vite (5180) ========" +pkill -f "zh/PlantAI-rag-new/ui/node_modules/.bin/vite" 2>/dev/null; sleep 2 +cd "$ROOT/ui" +VITE_BFF_TARGET="http://127.0.0.1:8090" setsid npm run dev \ + > /tmp/plantai-vite.log 2>&1 < /dev/null & +disown + +echo "" +echo "等待服务启动 (12s)..." +sleep 12 + +echo "" +echo "======== 5. 验证 ========" + +echo "[健康检查]" +c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:8098/docs 2>/dev/null) +[ "$c" = "200" ] && ok "8098 bioflow_service /docs=$c" || bad "8098 bioflow_service /docs=$c(见 /tmp/plantai-bioflow-8098.log)" +c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:8091/api/v1/qa-v1-1-73/capabilities/registry 2>/dev/null) +[ "$c" = "200" ] && ok "8091 QA registry=$c" || bad "8091 QA registry=$c(见 /tmp/plantai-qa-8091.log)" +c=$(curl -s -m 3 -o /dev/null -w "%{http_code}" http://127.0.0.1:5180/ 2>/dev/null) +[ "$c" = "200" ] && ok "5180 前端 =$c" || bad "5180 前端 =$c(见 /tmp/plantai-vite.log)" + +echo "[生信能力注册]" +REG=$(curl -s -m 5 http://127.0.0.1:8091/api/v1/qa-v1-1-73/capabilities/registry 2>/dev/null) +BIO=$(echo "$REG" | grep -o '"name":"bioflow-[a-z-]*"' | wc -l) +[ "$BIO" -ge 3 ] && ok "QA registry 生信能力 $BIO 个(期望 3)" || bad "QA registry 生信能力仅 $BIO 个(期望 3)" + +echo "[前端生信三开关]" +SW=$(curl -s -m 5 -H "Accept: */*" "http://127.0.0.1:5180/src/components/settings/SettingsPanel.vue" 2>/dev/null | grep -c "settingsBioflow\|bioflowCaps") +[ "$SW" -ge 2 ] && ok "前端 SettingsPanel 含「生信分析能力」三开关" || bad "前端 SettingsPanel 无生信三开关(可能旧代码,需硬刷新浏览器)" + +echo "" +echo "======== 结果: $PASS 通过 / $FAIL 失败 ========" +if [ "$FAIL" -eq 0 ]; then + echo "✅ 全部就绪。浏览器请 Ctrl+Shift+R 硬刷新(清缓存),再测生信对话。" +else + echo "❌ 有失败项,请查看 /tmp/plantai-qa-8091.log /tmp/plantai-bioflow-8098.log /tmp/plantai-vite.log" +fi +exit "$FAIL"