Files
AgentsMeeting/deploy/linux/post-deploy-check.sh
hmo b11b88887c merge: 恢复077c649内容(开发原则/K tests/spec/prd paths) + 保留flicker-free EasyTier/RDP + Linux兼容改善
- dashboard.html: 应用fI()闪烁修复到077c649版本(create-once/update-state pattern)
- dashboard.py: 新增 /api/tests 端点 (import tests_api)
- dashboard.py: /api/git 改用 git log 命令优先, 降级到 reflog
- dashboard.py: /api/monitor + /api/expected 增加 Linux 支持(systemd timer/crontab)
- dashboard.py: /api/spec + /api/prd 增加 246 venv 路径候选
- dashboard.py: /api/metagrowth git路径探测改善
- 恢复: meta_growth.py, tests_api.py, checklist_audit.py, service_registry.py
- 恢复: sync-venv.sh, post-deploy-check.sh, meta-growth-design.md
2026-07-15 10:10:25 +08:00

88 lines
2.3 KiB
Bash

#!/bin/bash
# post-deploy-check.sh — 部署后验证:K 测试无意外失败才算部署完成
#
# 用法: bash deploy/linux/post-deploy-check.sh
# 依赖: sync-venv.sh 先执行完毕, dashboard 已在运行
#
# 退出码:
# 0 = 验证通过(所有失败项均为 expected)
# 1 = 发现意外失败(需回滚或手动处理)
set -e
DASHBOARD_URL="http://127.0.0.1:5803"
TIMEOUT=10
echo "=== post-deploy-check: $(date) ==="
# 1. 等待 dashboard 就绪
echo "--- 等待 dashboard 就绪 ---"
for i in $(seq 1 6); do
if curl -s -o /dev/null -w "" --max-time 3 "$DASHBOARD_URL/" 2>/dev/null; then
echo "dashboard 已就绪 (尝试 $i)"
break
fi
if [ "$i" -eq 6 ]; then
echo "ERROR: dashboard 未能启动"
exit 1
fi
sleep 2
done
# 2. 获取 K 测试结果
echo "--- 获取 K 测试结果 ---"
TESTS_JSON=$(curl -s --max-time "$TIMEOUT" "$DASHBOARD_URL/api/tests" 2>/dev/null)
if [ -z "$TESTS_JSON" ]; then
echo "ERROR: /api/tests 无响应"
exit 1
fi
# 3. 解析并验证
# 使用 python3 解析 JSON,提取未预期的失败
REPORT=$(python3 -c "
import json, sys
data = json.loads('$TESTS_JSON')
if not isinstance(data, dict):
# 可能是列表格式
tests = data if isinstance(data, list) else []
summary = {}
else:
tests = data.get('tests', [])
summary = data.get('summary', {})
total = len(tests)
passed = sum(1 for t in tests if t.get('ok'))
failed = [t for t in tests if not t.get('ok')]
expected = [t for t in failed if t.get('expected')]
unexpected = [t for t in failed if not t.get('expected')]
print(f'TOTAL: {total}')
print(f'PASS: {passed}')
print(f'FAIL: {len(failed)} (expected: {len(expected)}, UNEXPECTED: {len(unexpected)})')
print('---')
for t in unexpected:
print(f'UNEXPECTED_FAIL: {t.get(\"name\",\"?\")} | {t.get(\"detail\",\"\")}')
for t in expected:
print(f'EXPECTED_FAIL: {t.get(\"name\",\"?\")} | {t.get(\"detail\",\"\")}')
sys.exit(1 if unexpected else 0)
")
echo "$REPORT"
# 提取退出码
EXIT_CODE=$?
if [ "$EXIT_CODE" -ne 0 ]; then
echo ""
echo "!!! 部署后验证失败:发现意外失败的测试项 !!!"
echo "运行以下命令查看详情:"
echo " curl -s $DASHBOARD_URL/api/tests | python3 -m json.tool"
exit 1
fi
echo ""
echo "=== post-deploy-check: 验证通过 ==="
exit 0