From d81f0524a8b47af4f07f98bbd027def2f8b3f695 Mon Sep 17 00:00:00 2001 From: yml2213 Date: Fri, 23 Oct 2026 10:21:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(hooks):=20pre-push=20=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=90=AF=E5=8A=A8=E6=B5=8B=E8=AF=95=20MySQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .githooks/pre-push | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) 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 通过"