fix(install): build desktop in 'desktop' stage on macOS/Linux instead of silently skipping (#36134)
The thin installer (apps/bootstrap-installer) drives install.sh stage-by-stage,
each in its own process. The `desktop` stage never called check_node, so the
Hermes-managed Node provisioned earlier (at $HERMES_HOME/node/bin) wasn't on
PATH. install_desktop's `command -v npm` check then failed and the build was
skipped — yet the stage still reported {"ok":true,"skipped":false}, so the
installer showed "Installation Complete" and only failed at the end with
"Couldn't find a built Hermes desktop ... the desktop build step may have been
skipped or failed."
Fix:
- Call check_node in the `desktop` stage (mirrors every other Node-dependent
stage) so the managed Node is on PATH (or installed).
- Make install_desktop self-provision via check_node and hard-fail (return 1)
if npm is still unavailable, instead of a silent `return 0`. The desktop
stage only runs when a build is explicitly requested (--include-desktop), so
an unavailable toolchain is a real failure, not graceful degradation.
Verified on macOS arm64: the `desktop` stage now builds
release/mac-arm64/Hermes.app, which matches resolve_hermes_desktop_exe, so the
installer's "Launch Hermes" succeeds.
This commit is contained in:
+17
-2
@@ -2332,9 +2332,19 @@ postinstall_mode() {
|
|||||||
install_desktop() {
|
install_desktop() {
|
||||||
local desktop_dir="$INSTALL_DIR/apps/desktop"
|
local desktop_dir="$INSTALL_DIR/apps/desktop"
|
||||||
|
|
||||||
|
# The desktop stage only runs when a build is explicitly requested
|
||||||
|
# (--include-desktop / 'desktop' stage), so a missing toolchain is a hard
|
||||||
|
# failure, not a silent skip — a silent skip yields a "complete" install
|
||||||
|
# with no app and a confusing "couldn't find a built desktop" at launch.
|
||||||
|
# Try the Hermes-managed Node first (check_node adds $HERMES_HOME/node/bin
|
||||||
|
# to PATH or installs it) before giving up.
|
||||||
if ! command -v npm >/dev/null 2>&1; then
|
if ! command -v npm >/dev/null 2>&1; then
|
||||||
log_warn "Skipping desktop build (Node.js / npm not on PATH)"
|
check_node
|
||||||
return 0
|
fi
|
||||||
|
if ! command -v npm >/dev/null 2>&1; then
|
||||||
|
log_error "Cannot build desktop app: Node.js / npm unavailable"
|
||||||
|
log_info "Install Node.js and retry: cd $desktop_dir && npm run pack"
|
||||||
|
return 1
|
||||||
fi
|
fi
|
||||||
if [ ! -f "$desktop_dir/package.json" ]; then
|
if [ ! -f "$desktop_dir/package.json" ]; then
|
||||||
log_warn "Skipping desktop build (apps/desktop not present in checkout)"
|
log_warn "Skipping desktop build (apps/desktop not present in checkout)"
|
||||||
@@ -2472,6 +2482,11 @@ run_stage_body() {
|
|||||||
detect_os
|
detect_os
|
||||||
resolve_install_layout
|
resolve_install_layout
|
||||||
require_install_dir
|
require_install_dir
|
||||||
|
# Each stage runs in its own process, so the Hermes-managed Node
|
||||||
|
# provisioned during prerequisites/node-deps (at $HERMES_HOME/node/bin)
|
||||||
|
# isn't on PATH here. check_node re-adds it (or installs if missing)
|
||||||
|
# so install_desktop can find npm instead of silently skipping.
|
||||||
|
check_node
|
||||||
install_desktop
|
install_desktop
|
||||||
;;
|
;;
|
||||||
complete)
|
complete)
|
||||||
|
|||||||
Reference in New Issue
Block a user