mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
fix(install): surface uv install + uv.lock sync errors instead of silently hanging (#24504)
The c1eb2dcda tiered installer made two install paths look frozen on
slow networks or broken environments because both swallowed the
underlying tool's stderr.
scripts/install.sh, setup-hermes.sh:
curl -LsSf https://astral.sh/uv/install.sh | sh 2>/dev/null
printed only '✗ Failed to install uv' on failure with no diagnostic.
Common real causes (glibc mismatch on old distros, corp proxy / TLS
interception, missing curl, ~/.local/bin not writable, disk full)
were invisible. Also: piping curl into sh masks curl failures under
set -e (no pipefail) — sh exits 0 on empty stdin, so a network error
succeeded silently.
Fix: download installer to a tempfile first, then run it. Capture
curl + installer output to a log; on failure, indent and print it.
scripts/install.sh hash-verified tier:
uv sync --all-extras --locked 2>"$(mktemp)" silenced uv's progress
output, making a fresh-venv install (~50 transitives including
torch-class deps) look hung for 1-5 minutes — users see 'Trying tier:
hash-verified (uv.lock) ...' and assume it's frozen. The mktemp
substitution also wasn't saved to a variable, so the uv error on
failure was unreachable.
Fix: stream uv's stderr directly so users see live 'Resolved N /
Prepared / Installed' progress. Print an upfront note that the first
run takes 1-5 minutes.
This commit is contained in:
parent
2863e9484a
commit
d186186e1a
2 changed files with 72 additions and 7 deletions
|
|
@ -82,7 +82,22 @@ else
|
|||
echo -e "${GREEN}✓${NC} uv found ($UV_VERSION)"
|
||||
else
|
||||
echo -e "${CYAN}→${NC} Installing uv..."
|
||||
if curl -LsSf https://astral.sh/uv/install.sh | sh 2>/dev/null; then
|
||||
# Capture installer output so a failure shows the user WHY
|
||||
# (network, glibc mismatch on old distros, missing curl, disk
|
||||
# full, etc.) instead of "✗ Failed to install uv" with zero
|
||||
# diagnostic. Two-stage to avoid `curl | sh` masking curl
|
||||
# failures (sh exits 0 on empty stdin under no pipefail).
|
||||
_uv_log="$(mktemp 2>/dev/null || echo "/tmp/hermes-uv-install.$$.log")"
|
||||
_uv_installer="$(mktemp 2>/dev/null || echo "/tmp/hermes-uv-installer.$$.sh")"
|
||||
if ! curl -LsSf https://astral.sh/uv/install.sh -o "$_uv_installer" 2>"$_uv_log"; then
|
||||
echo -e "${RED}✗${NC} Failed to download uv installer."
|
||||
sed 's/^/ /' "$_uv_log" >&2
|
||||
echo -e "${CYAN}→${NC} Install manually: https://docs.astral.sh/uv/"
|
||||
rm -f "$_uv_log" "$_uv_installer"
|
||||
exit 1
|
||||
fi
|
||||
if sh "$_uv_installer" >>"$_uv_log" 2>&1; then
|
||||
rm -f "$_uv_installer"
|
||||
if [ -x "$HOME/.local/bin/uv" ]; then
|
||||
UV_CMD="$HOME/.local/bin/uv"
|
||||
elif [ -x "$HOME/.cargo/bin/uv" ]; then
|
||||
|
|
@ -90,14 +105,22 @@ else
|
|||
fi
|
||||
|
||||
if [ -n "$UV_CMD" ]; then
|
||||
rm -f "$_uv_log"
|
||||
UV_VERSION=$($UV_CMD --version 2>/dev/null)
|
||||
echo -e "${GREEN}✓${NC} uv installed ($UV_VERSION)"
|
||||
else
|
||||
echo -e "${RED}✗${NC} uv installed but not found. Add ~/.local/bin to PATH and retry."
|
||||
echo -e "${RED}✗${NC} uv installer reported success but binary not found. Add ~/.local/bin to PATH and retry."
|
||||
echo -e "${CYAN}→${NC} Installer output:"
|
||||
sed 's/^/ /' "$_uv_log" >&2
|
||||
rm -f "$_uv_log"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
echo -e "${RED}✗${NC} Failed to install uv. Visit https://docs.astral.sh/uv/"
|
||||
echo -e "${RED}✗${NC} Failed to install uv."
|
||||
echo -e "${CYAN}→${NC} Installer output:"
|
||||
sed 's/^/ /' "$_uv_log" >&2
|
||||
echo -e "${CYAN}→${NC} Install manually: https://docs.astral.sh/uv/"
|
||||
rm -f "$_uv_log" "$_uv_installer"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue