69 lines
3.0 KiB
Bash
Executable File
69 lines
3.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# smoke_golden.sh —— BIOFLOW 内核镜像冒烟 + 金标等价性验证(沉淀版)
|
|
# 用法: smoke_golden.sh <image> [golden-input-dir] [expected-ids-file]
|
|
# 例: smoke_golden.sh bioflow-gf
|
|
# (默认取仓库自带 assets/examples/test_input 与其中 test_final/identify/combine/Ft.SPL.combined.ids)
|
|
# 前置: docker 可用; BIOFLOW_DATA 含 hmm/ 软链(Pfam-A.hmm + .h3* 索引)
|
|
# 零硬编码: 无任何宿主机写死路径。参数顺序: <image> [golden-input-dir] [expected-ids]
|
|
# 不传目录参数时推导: golden-input-dir 取脚本同级 ../assets/examples/test_input
|
|
# (bioflow_kernel/assets 仓库自带金标输入, 与 dev 同源); expected-ids 取
|
|
# <golden-input-dir>/test_final/identify/combine/Ft.SPL.combined.ids
|
|
# (若仓库已随 dev 版本带预期输出; 否则必须显式传参)。
|
|
set -euo pipefail
|
|
|
|
IMAGE="${1:?usage: $0 <image> [golden-input-dir] [expected-ids]}"
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
DEFAULT_GOLDEN="$SCRIPT_DIR/../assets/examples/test_input"
|
|
if [[ $# -ge 2 ]]; then
|
|
GOLDEN_INPUT="$2"
|
|
elif [[ -d "$DEFAULT_GOLDEN" ]]; then
|
|
GOLDEN_INPUT="$DEFAULT_GOLDEN"
|
|
else
|
|
GOLDEN_INPUT=""
|
|
fi
|
|
if [[ $# -ge 3 ]]; then
|
|
EXPECTED_IDS="$3"
|
|
else
|
|
EXPECTED_IDS="$GOLDEN_INPUT/test_final/identify/combine/Ft.SPL.combined.ids"
|
|
fi
|
|
BIOFLOW_DATA="${BIOFLOW_DATA:?需设置 BIOFLOW_DATA(含 hmm/ 软链) 或传参; 见用法注释}"
|
|
HOST_UID="${HOST_UID:-$(id -u)}"
|
|
CPU="${CPU:-16}"
|
|
MEM="${MEM:-64g}"
|
|
WORK="$(mktemp -d /tmp/bioflow-smoke.XXXXXX)"
|
|
JOB_IN="$WORK/input"
|
|
JOB_WS="$WORK/workspace"
|
|
mkdir -p "$JOB_IN" "$JOB_WS"
|
|
|
|
echo "[1/4] python --version"
|
|
docker run --rm "$IMAGE" python --version
|
|
|
|
echo "[2/4] ldd 缺库检查"
|
|
docker run --rm "$IMAGE" bash -lc 'ldd $(command -v python) | grep -c "not found" || true'
|
|
|
|
echo "[3/4] 无 /home/xzq、无 conda 本体"
|
|
docker run --rm "$IMAGE" bash -lc 'test ! -e /home/xzq && test ! -e /opt/conda/bin/conda && echo CLEAN'
|
|
|
|
echo "[4/4] 金标 identify 24 ID diff(仅 bioflow-gf)"
|
|
if [[ "$IMAGE" == bioflow-gf || "$IMAGE" == bioflow-gf:* ]] && [[ -f "$EXPECTED_IDS" && -d "$GOLDEN_INPUT" ]]; then
|
|
cp -a "$GOLDEN_INPUT"/. "$JOB_IN"/
|
|
docker run --rm --user "$HOST_UID" \
|
|
-v "$JOB_IN":/job/input -v "$JOB_WS":/job/workspace \
|
|
-v "$BIOFLOW_DATA":/bioflow-data:ro \
|
|
-e BBA_PFAM_DIR=/bioflow-data/hmm -e BBA_DISABLE_RAG_PFAM_LOOKUP=1 \
|
|
--cpus "$CPU" --memory "$MEM" \
|
|
"$IMAGE" python -B -m cli.run_identify \
|
|
--input-dir /job/input --workspace /job/workspace --prefix Ft.SPL --cpu "$CPU" --force
|
|
# 实测产物: final/Ft.SPL.identified_members.id(24 ID); 金标对比文件为 dev 的 combined.ids
|
|
GOT_IDS="$(find "$JOB_WS" -name "Ft.SPL.identified_members.id" -path "*/final/*" | head -1)"
|
|
[[ -n "$GOT_IDS" ]] || { echo "[FAIL] identified_members.id 未产出"; find "$JOB_WS" -maxdepth 4 -type d | head -20; exit 1; }
|
|
echo "diff (空=全等):"
|
|
diff <(sort "$EXPECTED_IDS") <(sort "$GOT_IDS")
|
|
echo "GOLDEN_DIFF_OK $(wc -l < "$GOT_IDS") IDs"
|
|
else
|
|
echo "SKIP golden (非 bioflow-gf 或无金标数据)"
|
|
fi
|
|
|
|
rm -rf "$WORK"
|
|
echo "SMOKE DONE"
|