verify-local.sh
1.46 KB
#!/usr/bin/env bash
# 本地一键验收:起 Docker MySQL → 空库则建表 → 建本地管理员 → 启动 API 与 worker → 跑全部真实链路脚本 → 停进程。
# 用法:VOKO_TEST_EMAIL=you@gmail.com bash tools/scripts/verify-local.sh
set -euo pipefail
cd "$(dirname "$0")/../.."
: "${VOKO_TEST_EMAIL:?请设置 VOKO_TEST_EMAIL(一个能收信的邮箱)}"
node -e 'if (Number(process.versions.node.split(".")[0]) < 24) { console.error("需要 Node 24+,当前 " + process.version); process.exit(1) }'
pnpm install
pnpm mysql:up
if [ "$(node apps/voko-server/tools/db-is-empty.mjs)" = "empty" ]; then
pnpm --filter @voko/server db:init
else
pnpm --filter @voko/server db:migrate
fi
pnpm dev:user admin@example.test admin123
node apps/voko-server/src/main.js > tmp-voko-server.log 2>&1 &
SERVER_PID=$!
node apps/voko-server/src/voko-worker-main.js > tmp-voko-worker.log 2>&1 &
WORKER_PID=$!
trap 'kill $SERVER_PID $WORKER_PID 2>/dev/null || true' EXIT
for _ in $(seq 1 30); do
curl -sf http://localhost:9201/healthz >/dev/null && break
sleep 1
done
curl -sf http://localhost:9201/healthz >/dev/null || { echo "API 未启动,日志:"; cat tmp-voko-server.log; exit 1; }
VOKO_ADMIN_EMAIL=admin@example.test VOKO_ADMIN_PASSWORD=admin123 \
pnpm --filter @voko/server verify:skeleton
export VOKO_ADMIN_EMAIL=admin@example.test VOKO_ADMIN_PASSWORD=admin123
for scenario in f0 f1 f2 concurrency timers; do
pnpm --filter @voko/server "verify:$scenario"
done