Files
UHD_Media_Tool/scripts/test-all.sh
T
rootandClaude Opus 5.5 11ca2f01ff chore: 一键检查、发布脚本与开发环境约定
- deno task test:all(scripts/test-all.sh):逐包跑完再汇总,连不上测试库直接失败,
  web 用 Node 跑 vitest;deno task ci 改用它
- deno task release(scripts/release.sh):工作区不干净、CHANGELOG 无本版条目即拒绝;
  打 tag、构建、只替换 app、核对健康接口版本
- deno task dev:up:起开发库并迁移到最新;开发 API 端口改 4390(4380 留给本机部署版)
- CLAUDE.md:命令、提交与发布约定、文档放哪

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-02 16:08:09 +08:00

55 lines
1.9 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# 全量测试:逐个包跑完(不在第一个失败处停),最后汇总;连不上测试库直接失败,不让数据库用例静默跳过。
# 用法:sh scripts/test-all.sh [包目录...] 缺省跑全部 workspace 成员
# web 用 Node 跑 vitest(Deno 跑 web 的 vitest 有兼容问题)。
set -u
cd "$(dirname "$0")/.."
ROOT=$PWD
if [ -f .env ]; then set -a; . ./.env; set +a; fi
DB_URL=${DATABASE_URL:-postgres://umt:umt@localhost:55433/umt}
if [ "${UMT_SKIP_DB_TESTS:-}" != "1" ]; then
if ! deno eval --quiet "
import pg from 'npm:[email protected]';
const c = new pg.Client({ connectionString: '$DB_URL', connectionTimeoutMillis: 3000 });
await c.connect(); await c.end();" >/dev/null 2>&1; then
echo "✗ 连不上测试库($DB_URL)。先 deno task dev:up;确实不跑数据库用例时设 UMT_SKIP_DB_TESTS=1" >&2
exit 2
fi
fi
members=("$@")
[ ${#members[@]} -eq 0 ] && members=(packages/adapters packages/agent packages/contracts packages/db packages/domain
packages/mapping packages/tasks packages/testkit apps/server apps/web)
LOG_DIR=${TEST_LOG_DIR:-$ROOT/.local/test-logs}
mkdir -p "$LOG_DIR"
failed=()
summary=()
for m in "${members[@]}"; do
log="$LOG_DIR/$(echo "$m" | tr / -).log"
printf '▶ %-20s ' "$m"
if [ "$m" = apps/web ]; then
(cd "$m" && "$ROOT/node_modules/.bin/vitest" run) >"$log" 2>&1
else
(cd "$m" && deno run -A npm:vitest run) >"$log" 2>&1
fi
code=$?
line=$(sed 's/\x1b\[[0-9;]*m//g' "$log" | grep -E '^\s+Tests ' | tail -1 | tr -s ' ')
if [ $code -eq 0 ]; then echo "✓ ${line:-}"; else echo "✗ ${line:-退出码 $code}"; failed+=("$m"); fi
summary+=("$m:${line:-exit $code}")
done
echo
if [ ${#failed[@]} -eq 0 ]; then
echo "全部通过(日志 $LOG_DIR)"
else
echo "失败:${failed[*]}"
for m in "${failed[@]}"; do
echo "── $m"
sed 's/\x1b\[[0-9;]*m//g' "$LOG_DIR/$(echo "$m" | tr / -).log" | grep -E '(FAIL|×) ' | head -10
done
exit 1
fi