diff --git a/.githooks/pre-push b/.githooks/pre-push index 9ae57fd..3215524 100755 --- a/.githooks/pre-push +++ b/.githooks/pre-push @@ -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 通过"