fix(hooks): pre-push 自动启动测试 MySQL
This commit is contained in:
@@ -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 通过"
|
||||
|
||||
Reference in New Issue
Block a user