121 lines
3.2 KiB
Bash
121 lines
3.2 KiB
Bash
#!/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"
|