pbl_evidence/scripts/setup_test_env.sh
2026-09-23 00:03:12 +08:00

55 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# =====================================================================
# pbl_evidence 测试环境引导(发现项 DISC.2)
#
# 背景:测试机宿主 python3 **没有** pytest,`python3 -m pytest` 直接
# `No module named pytest`。此前靠临时注入
# PYTHONPATH=<workspace>/.pylibs(pytest 9.1.1)跑通,属一次性手段,
# 不可复现、且会让 test 角色误判为「用例失败/环境不可用」。
#
# 本脚本把「测试前置依赖」变成显式、可重放的步骤:
# 1) 在模块仓库内建独立测试 venv(默认 .venv-test,已在 .gitignore 排除)
# 2) 安装 requirements-dev.txt(== pyproject [project.optional-dependencies].test)
# 3) 打印 pytest 版本自证可用
#
# 用法:
# bash scripts/setup_test_env.sh
# PBL_EVIDENCE_TEST_VENV=/tmp/ev-venv bash scripts/setup_test_env.sh # 换 venv 位置
# PBL_EVIDENCE_INSTALL_PKG=1 bash scripts/setup_test_env.sh # 顺带 pip install -e .
#
# 幂等:venv 已存在则复用,pip 已满足则秒退;可被 build.sh / CI 反复调用。
# =====================================================================
set -euo pipefail
MODULE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
VENV="${PBL_EVIDENCE_TEST_VENV:-${MODULE_ROOT}/.venv-test}"
REQ_DEV="${MODULE_ROOT}/requirements-dev.txt"
HOST_PY="${PBL_EVIDENCE_HOST_PYTHON:-$(command -v python3)}"
log() { echo "[setup_test_env] $*"; }
die() { echo "[setup_test_env][FATAL] $*" >&2; exit 1; }
[ -f "${REQ_DEV}" ] || die "缺少测试依赖清单 ${REQ_DEV}"
[ -x "${HOST_PY}" ] || die "找不到宿主 python3(可用 PBL_EVIDENCE_HOST_PYTHON 指定)"
if [ ! -x "${VENV}/bin/python" ]; then
log "创建测试 venv: ${VENV}"
"${HOST_PY}" -m venv "${VENV}" || die "python3 -m venv 失败(宿主缺 venv 模块?)"
else
log "复用已存在的测试 venv: ${VENV}"
fi
VPY="${VENV}/bin/python"
# 升级 pip 属尽力而为(离线/内网源可能不可达),失败不阻断——真正的门禁是下一步安装
"${VPY}" -m pip install --quiet --upgrade pip >/dev/null 2>&1 || log "pip 自升级跳过(不影响后续安装)"
log "安装测试依赖: ${REQ_DEV}"
"${VPY}" -m pip install -r "${REQ_DEV}" || die "安装 pytest 失败:检查内网 PyPI 源可达性(见 README「Running tests」排障)"
if [ "${PBL_EVIDENCE_INSTALL_PKG:-0}" = "1" ]; then
log "安装模块本体(可编辑):pip install -e ${MODULE_ROOT}"
"${VPY}" -m pip install -e "${MODULE_ROOT}" || die "pip install -e . 失败"
fi
log "自证可用:$("${VPY}" -m pytest --version 2>&1 | head -1)"
log "TEST ENV READY: ${VPY}"