fix(hooks): pre-push 自动启动测试 MySQL

This commit is contained in:
yml2213
2026-10-23 10:21:15 +08:00
parent 331208742e
commit d81f0524a8
+31
View File
@@ -57,6 +57,37 @@ if [ "${TYPECHECK:-0}" = "1" ]; then
echo "[pre-push] Pyright 通过"
fi
# pytest 跑在真实 MySQL 上;钩子自己确保测试库可用,避免只抛一堆连接错误。
ensure_test_mysql() {
if ! command -v docker >/dev/null 2>&1; then
echo "[pre-push] ❌ 未安装 Docker,无法启动测试 MySQL"
return 1
fi
if ! docker info >/dev/null 2>&1; then
echo "[pre-push] ❌ Docker 未运行,请先启动 Docker"
return 1
fi
if docker compose ps -q mysql 2>/dev/null | grep -q .; then
echo "[pre-push] 测试 MySQL 已在运行"
else
echo "[pre-push] 测试 MySQL 未运行,正在启动..."
docker compose up -d mysql
fi
for _ in $(seq 1 30); do
if docker compose exec -T mysql sh -c \
'mysqladmin ping -h localhost -uroot -p"$MYSQL_ROOT_PASSWORD" --silent' \
>/dev/null 2>&1; then
echo "[pre-push] 测试 MySQL 已就绪"
return 0
fi
sleep 2
done
echo "[pre-push] ❌ 测试 MySQL 启动超时"
return 1
}
ensure_test_mysql
echo "[pre-push] 运行 pytest..."
./dev.sh test -q
echo "[pre-push] pytest 通过"