* fix(install): fail when Node dependencies cannot install (#85297) The POSIX installer converted root and TUI npm failures into warnings, then printed a dependency-success message and reached the installation-complete banner with a zero exit status. This left consumers with no usable node_modules while reporting success. Treat both required npm installs as fatal: log an error, restore tracked lockfile churn, return status 1, and propagate the failure from the monolithic and node-deps stage callers. Successful installs, Termux and missing-Node skips, missing-manifest skips, and optional Playwright/Browser Use/Computer Use best-effort behavior remain unchanged. The fix is limited to the POSIX installer; the PowerShell installer is outside this issue's scope. Focused and adjacent installer tests passed (32), with bash syntax, py_compile, and diff checks clean. The broader installer family had 90 passes, one unrelated pre-existing failure, and two skips; the full suite was environment-limited by missing dependencies. CodeRabbit, iterative deep security/compatibility reviews, and final confidence security/compatibility reviews were clean against the final diff. Fixes #85297 * fix(install): require npm alongside node in check_node (#77003) A stray `node` symlink without a sibling `npm` (leftover from a node version manager) made check_node report "Node.js found"; every later npm install then failed and the desktop build died with an opaque "Node.js / npm unavailable". Node now only counts as found when npm resolves on the same PATH, with an explicit "stray node symlink?" branch that falls through to the Hermes-managed Node (which bundles npm). The overlapping success-log honesty half of the original PR is subsumed by the previous commit, which makes a failed npm install fatal rather than conditionally-logged; the behavioral tests there cover it, so this commit keeps only the check_node PATH-gate assertions. Fixes #77003. Co-authored-by: criptogus <criptogus@users.noreply.github.com> --------- Co-authored-by: Eugeniusz Gilewski <egilewski@egilewski.com> Co-authored-by: CriptoGus <128640021+criptogus@users.noreply.github.com> Co-authored-by: criptogus <criptogus@users.noreply.github.com>
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""Regression tests for install.sh Node/npm checks (#77003).
|
|
|
|
A stray `node` symlink without a sibling `npm` (leftover from a node
|
|
version manager) made the installer report "✓ Node.js found" and then fail
|
|
opaquely at the desktop stage. Node must only count as found when npm
|
|
resolves on the same PATH, and npm install stages must not report success
|
|
when the install actually failed.
|
|
"""
|
|
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent
|
|
INSTALL_SH = REPO_ROOT / "scripts" / "install.sh"
|
|
|
|
|
|
def test_check_node_requires_npm_alongside_node() -> None:
|
|
"""check_node must not report success when only `node` resolves.
|
|
|
|
Before the fix, `command -v node` succeeding was enough — a stray node
|
|
symlink (no sibling npm) passed the check, every later `npm install`
|
|
failed silently, and the desktop build died with an opaque
|
|
"Node.js / npm unavailable" (#77003).
|
|
"""
|
|
text = INSTALL_SH.read_text()
|
|
|
|
# The system-toolchain branch now gates on BOTH node and npm.
|
|
assert (
|
|
"if command -v node &> /dev/null && command -v npm &> /dev/null \\" in text
|
|
)
|
|
# The "node found but npm missing" case has its own explicit branch that
|
|
# falls through to installing the Hermes-managed Node (which bundles npm).
|
|
assert "node found but npm is not on PATH (stray node symlink?)" in text
|
|
|
|
|
|
def test_check_node_managed_requires_npm() -> None:
|
|
"""The Hermes-managed Node fallback also requires its npm to exist."""
|
|
text = INSTALL_SH.read_text()
|
|
assert (
|
|
'[ -x "$HERMES_HOME/node/bin/node" ] && [ -x "$HERMES_HOME/node/bin/npm" ] \\'
|
|
in text
|
|
)
|
|
|