hypertwist/scripts/lib-hypertwist-gitnexus.sh
2026-06-30 06:32:24 +00:00

81 lines
2.6 KiB
Bash

#!/usr/bin/env bash
hypertwist_gitnexus_repo_root() {
cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd
}
hypertwist_gitnexus_repo_runtime_dir() {
local repo_root="${1:-$(hypertwist_gitnexus_repo_root)}"
printf '%s\n' "${HYPERTWIST_GITNEXUS_RUNTIME_DIR:-$repo_root/tools/gitnexus/runtime/gitnexus}"
}
hypertwist_gitnexus_retained_runtime_dir() {
local repo_root="${1:-$(hypertwist_gitnexus_repo_root)}"
printf '%s\n' "$repo_root/mirrors/GitNexus/gitnexus"
}
hypertwist_gitnexus_probe_runtime_dir() {
local runtime_dir="$1"
local runtime_label="$2"
local local_gitnexus_cli="$runtime_dir/dist/cli/index.js"
if [[ ! -f "$local_gitnexus_cli" ]]; then
return 1
fi
local probe_output=""
local probe_exit=0
set +e
probe_output="$(
cd "$runtime_dir" &&
node --input-type=module -e 'try { await import("@ladybugdb/core"); } catch (error) { const code = error?.code ? `${error.code}: ` : ""; const message = error?.message || String(error); console.error(`${code}${message}`); process.exit(1); }' 2>&1
)"
probe_exit=$?
set -e
if [[ "$probe_exit" -eq 0 ]]; then
return 0
fi
probe_output="${probe_output//$'\n'/ }"
echo "${runtime_label} is not usable on this host (${probe_output})." >&2
return 1
}
hypertwist_gitnexus_resolve_local_cli() {
local repo_root="${1:-$(hypertwist_gitnexus_repo_root)}"
local bootstrap_script="$repo_root/scripts/bootstrap-hypertwist-gitnexus.sh"
local repo_runtime_dir
repo_runtime_dir="$(hypertwist_gitnexus_repo_runtime_dir "$repo_root")"
local retained_runtime_dir
retained_runtime_dir="$(hypertwist_gitnexus_retained_runtime_dir "$repo_root")"
local repo_runtime_cli="$repo_runtime_dir/dist/cli/index.js"
local retained_runtime_cli="$retained_runtime_dir/dist/cli/index.js"
if [[ "${HYPERTWIST_GITNEXUS_SKIP_LOCAL_CLI:-0}" == "1" ]]; then
echo "Skipping local GitNexus CLIs because HYPERTWIST_GITNEXUS_SKIP_LOCAL_CLI=1." >&2
return 1
fi
if hypertwist_gitnexus_probe_runtime_dir "$repo_runtime_dir" "Repo-owned GitNexus runtime"; then
printf '%s\n' "$repo_runtime_cli"
return 0
fi
if [[ -x "$bootstrap_script" ]]; then
"$bootstrap_script" --if-missing >/dev/null 2>&1 || true
if hypertwist_gitnexus_probe_runtime_dir "$repo_runtime_dir" "Repo-owned GitNexus runtime"; then
printf '%s\n' "$repo_runtime_cli"
return 0
fi
fi
if hypertwist_gitnexus_probe_runtime_dir "$retained_runtime_dir" "Retained GitNexus runtime"; then
printf '%s\n' "$retained_runtime_cli"
return 0
fi
echo "No usable local GitNexus runtime is available. Falling back to npx gitnexus@latest." >&2
return 1
}