xiaowei-system/skills/devops/devops-umbrella/references/gaokao-site/opencode-fix-workflow.md

3.6 KiB
Raw Blame History

opencode 代码修復工作流

2026-06-20 新增,来自 XSS 修复 + Python backend bug 修复 + 部署验证 牧尘纠正:所有编码任务用 opencode不要自己 patch

适用场景

任何需要修改 gaokao-site 代码的任务Python 后端、HTML/JS 前端、CSS

  • 修 bugAPI 500、JS 崩溃、XSS
  • 加功能(新 API、新页面元素
  • 改文案(导航改名、法律声明更新)
  • 重构(提取公共代码、清理重复)

工作流

我(小唯)
  ├─ 分析问题,定位文件:行号
  ├─ opencode run --dir ~/mc/gaokao-site "具体修复指令"
  │    └─ opencode 读代码 → patch → 编译/验证
  ├─ 我验收改动
  ├─ rsync 到服务器
  ├─ systemctl restart gaokao-chat
  └─ curl 验证 API + 页面

opencode 调用模板

# 修 Python 后端
DEEPSEEK_API_KEY="sk-b12...6bbd" opencode run \
  --dir ~/mc/gaokao-site \
  -m deepseek/deepseek-v4-flash \
  "修复问题...每次修完用 python3 -c 'import py_compile; py_compile.compile(\"文件.py\", doraise=True); print(\"OK\")' 验证"

# 修 HTML/JS 前端
DEEPSEEK_API_KEY="sk-b12...6bbd" opencode run \
  --dir ~/mc/gaokao-site \
  -m deepseek/deepseek-v4-flash \
  "修复 HTML XSS...修改后用 python3 验证"

关键参数说明

参数 说明
--dir ~/mc/gaokao-site opencode 的工作目录
-m deepseek/deepseek-v4-flash 模型选择
环境变量 DEEPSEEK_API_KEY=... 必须显式传递,否则 opencode 找不到 key

部署验证

# 1. 上传文件
rsync -avz \
  ~/mc/gaokao-site/gaokao_chat_server_v2.py \
  ~/mc/gaokao-site/index.html \
  root@192.144.179.11:/www/wwwroot/gaokao/

# 2. 重启服务
sshpass -p 'xue.2538' ssh root@192.144.179.11 "systemctl restart gaokao-chat"
sleep 2

# 3. 验证服务 + API
sshpass -p 'xue.2538' ssh root@192.144.179.11 "systemctl is-active gaokao-chat && curl -s http://127.0.0.1:8080/health"
sshpass -p 'xue.2538' ssh root@192.144.179.11 'curl -s -X POST -H "Content-Type: application/json" -d "{\"score\":550,\"subject\":\"物理类\"}" http://127.0.0.1:8080/api/prob' | python3 -c "import json,sys;d=json.load(sys.stdin);print('chong:',len(d['chong']),'wen:',len(d['wen']),'bao:',len(d['bao']))"

# 4. 验证 AI 对话
sshpass -p 'xue.2538' ssh root@192.144.179.11 'SID=$(curl -s -X POST -H "Content-Type: application/json" -d "{\"message\":\"你好\"}" http://127.0.0.1:8080/api/chat/start | python3 -c "import json,sys;print(json.load(sys.stdin)[\"session_id\"])"); curl -s -X POST -H "Content-Type: application/json" -d "{\"message\":\"我550分物理类能上什么学校\",\"session_id\":\"$SID\"}" http://127.0.0.1:8080/api/chat/respond | python3 -c "import json,sys;d=json.load(sys.stdin);print(len(d[\"reply\"]),\"chars\");print(d[\"reply\"][:100])"'

# 5. 同步本地 + git commit
rsync -avz root@192.144.179.11:/www/wwwroot/gaokao/ ~/mc/gaokao-site/ --exclude='.git' --exclude='__pycache__' --exclude='venv' --exclude='*.db'
cd ~/mc/gaokao-site && git add -A && git commit -m "fix: ..."
git push origin master

注意事项

  • 不要因为改动小就跳过 opencode — 即使只有一行改动也走 opencode
  • 多个问题分步修 — opencode 一次处理一个文件,修完验证再修下一个
  • 线上和本地代码可能不同 — 服务器运行 gaokao_chat_server_v2.py(下划线),本地有下划线 + 连字符两个版本。确认在改哪个
  • gunicorn import 陷阱systemctl restart 比 kill+手动启动更可靠,自动清 __pycache__
  • DEEPSEEK_API_KEY 必须显式传递 — opencode 不继承 Hermes 环境变量