Files

121 lines
3.2 KiB
Bash
Raw Permalink Normal View History

2026-08-03 18:42:47 +08:00
#!/usr/bin/env bash
# Check bbav5 project paths, resource links, and core tool startup.
set -u
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
ENV_FILE="$PROJECT_DIR/.env"
if [ -f "$ENV_FILE" ]; then
set -a
. "$ENV_FILE"
set +a
fi
PROJECT_ROOT="${BBAV5_PROJECT_ROOT:-$PROJECT_DIR}"
CONDA_BASE="${BBAV5_CONDA_BASE:-/home/xzq/miniconda3}"
DEFAULT_ENV="${BBAV5_DEFAULT_ENV:-test4py311}"
GFPY_ENV="${BBAV5_GFPY_ENV:-gfpy312}"
INTERPROSCAN_BIN="${INTERPROSCAN_BIN:-$PROJECT_ROOT/tools/interproscan-5.78-109.0/interproscan.sh}"
failures=0
ok() {
printf '[OK] %s\n' "$1"
}
warn() {
printf '[WARN] %s\n' "$1"
}
fail() {
printf '[FAIL] %s\n' "$1"
failures=$((failures + 1))
}
check_path() {
local label="$1"
local path="$2"
if [ -e "$path" ]; then
ok "$label exists: $path -> $(readlink -f "$path" 2>/dev/null || printf '%s' "$path")"
else
fail "$label missing: $path"
fi
}
check_writable() {
local label="$1"
local path="$2"
if [ -w "$path" ]; then
ok "$label writable: $path"
else
fail "$label not writable: $path"
fi
}
run_check() {
local label="$1"
shift
if "$@" >/tmp/bbav5_env_check.out 2>/tmp/bbav5_env_check.err; then
ok "$label"
else
fail "$label"
sed 's/^/ stderr: /' /tmp/bbav5_env_check.err | head -5
fi
}
printf 'bbav5 environment check\n'
printf 'PROJECT_ROOT=%s\n' "$PROJECT_ROOT"
printf 'CONDA_BASE=%s\n' "$CONDA_BASE"
if [ "$PROJECT_ROOT" = "$PROJECT_DIR" ]; then
ok "BBAV5_PROJECT_ROOT matches this project"
else
fail "BBAV5_PROJECT_ROOT differs from this project: expected $PROJECT_DIR"
fi
check_path ".env" "$ENV_FILE"
check_path "input" "$PROJECT_ROOT/input"
check_path "workspace" "$PROJECT_ROOT/workspace"
check_path "data/hmm/Pfam-A.hmm" "$PROJECT_ROOT/data/hmm/Pfam-A.hmm"
check_path "data/kegg_new" "$PROJECT_ROOT/data/kegg_new"
check_path "InterProScan" "$INTERPROSCAN_BIN"
check_writable "input" "$PROJECT_ROOT/input"
check_writable "workspace" "$PROJECT_ROOT/workspace"
DEFAULT_BIN="$CONDA_BASE/envs/$DEFAULT_ENV/bin"
GFPY_BIN="$CONDA_BASE/envs/$GFPY_ENV/bin"
check_path "$DEFAULT_ENV bin" "$DEFAULT_BIN"
check_path "$GFPY_ENV bin" "$GFPY_BIN"
run_check "$DEFAULT_ENV hmmsearch starts" "$DEFAULT_BIN/hmmsearch" -h
run_check "$DEFAULT_ENV hmmscan starts" "$DEFAULT_BIN/hmmscan" -h
run_check "$DEFAULT_ENV blastp starts" "$DEFAULT_BIN/blastp" -version
run_check "$DEFAULT_ENV Rscript starts" "$DEFAULT_BIN/Rscript" -e 'cat("OK\n")'
for env_name in "$DEFAULT_ENV" "$GFPY_ENV"; do
lib_dir="$CONDA_BASE/envs/$env_name/lib"
if [ ! -d "$lib_dir" ]; then
fail "$env_name lib dir missing: $lib_dir"
continue
fi
broken="$(find "$lib_dir" -maxdepth 1 -xtype l -print 2>/dev/null | head -20)"
if [ -n "$broken" ]; then
warn "$env_name has broken top-level library symlinks:"
printf '%s\n' "$broken" | sed 's/^/ /'
else
ok "$env_name top-level library symlinks resolve"
fi
done
if [ "$failures" -eq 0 ]; then
ok "environment check completed"
else
fail "environment check completed with $failures failure(s)"
fi
exit "$failures"