From 3e508363f73e5ff7cc4afc8249ec36cac2edce73 Mon Sep 17 00:00:00 2001 From: jinhyuk9714 Date: Fri, 5 Jun 2026 00:10:51 +0900 Subject: [PATCH] fix(update): avoid source-building uv on Termux --- hermes_cli/main.py | 8 +++++++- tests/hermes_cli/test_cmd_update.py | 30 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/hermes_cli/main.py b/hermes_cli/main.py index cefc6d4b898..991af42e2f1 100644 --- a/hermes_cli/main.py +++ b/hermes_cli/main.py @@ -7736,7 +7736,13 @@ def _ensure_uv_for_termux(pip_cmd: list[str]) -> str | None: return None try: print(" → Termux detected: trying to install uv for faster dependency updates...") - subprocess.run(pip_cmd + ["install", "uv"], cwd=PROJECT_ROOT, check=False) + result = subprocess.run( + pip_cmd + ["install", "uv", "--only-binary", ":all:"], + cwd=PROJECT_ROOT, + check=False, + ) + if result.returncode != 0: + return None except Exception: pass # After pip install, check managed path first, then PATH diff --git a/tests/hermes_cli/test_cmd_update.py b/tests/hermes_cli/test_cmd_update.py index 224c65e9a48..631e226640f 100644 --- a/tests/hermes_cli/test_cmd_update.py +++ b/tests/hermes_cli/test_cmd_update.py @@ -109,6 +109,36 @@ class TestCmdUpdatePip: assert "env" not in mock_run.call_args.kwargs +class TestCmdUpdateTermuxUvBootstrap: + """Regression tests for Termux-specific uv bootstrap behavior.""" + + @patch("shutil.which", return_value=None) + @patch("subprocess.run") + def test_termux_uv_bootstrap_uses_binary_only_install( + self, mock_run, _mock_which, monkeypatch + ): + from hermes_cli import main as hm + + mock_run.return_value = subprocess.CompletedProcess([], 1, stdout="", stderr="") + monkeypatch.setattr(hm, "_is_termux_env", lambda env=None: True) + + uv_bin = hm._ensure_uv_for_termux(["/termux/python", "-m", "pip"]) + + assert uv_bin is None + assert mock_run.call_count == 1 + assert mock_run.call_args.args[0] == [ + "/termux/python", + "-m", + "pip", + "install", + "uv", + "--only-binary", + ":all:", + ] + assert mock_run.call_args.kwargs["cwd"] == PROJECT_ROOT + assert mock_run.call_args.kwargs["check"] is False + + class TestCmdUpdateBranchFallback: """cmd_update falls back to main when current branch has no remote counterpart."""