kshitij
0678f8f019
fix(desktop): force npm --include=dev so self-update rebuild can't be broken by NODE_ENV=production ( #38416 )
...
The desktop self-update rebuild (`hermes desktop --build-only`, driven by
the macOS in-app updater) runs `_run_npm_install_deterministic`, which used
plain `npm ci` / `npm install`. Those honor an inherited
`NODE_ENV=production` (or npm `omit=dev`) and silently omit devDependencies.
The desktop build toolchain — tsc, vite, electron-builder — are all
devDependencies, so under `NODE_ENV=production` the install completes (exit 0)
but `tsc` is never placed, and the very next step (`tsc -b && vite build`)
dies with `tsc: command not found` (exit 127). The user sees
"UPDATE DIDN'T FINISH / Rebuilding the desktop app failed (exit 127)" even
though the git/pip update applied cleanly. NODE_ENV=production can leak in
from a shell profile, a parent process, or a packaged-app launch context.
Force `--include=dev` on both the `npm ci` and `npm install` paths. The only
callers are frontend builds (desktop / TUI / web), which always need the dev
toolchain, so this is safe across the board.
Verified empirically: under NODE_ENV=production, `npm ci` leaves tsc MISSING
while `npm ci --include=dev` installs it. Added two regression tests
(test_npm_ci_forces_include_dev, test_npm_install_fallback_forces_include_dev)
— both confirmed to FAIL when the fix is reverted.
2026-07-16 15:45:07 +00:00
..
2026-07-14 07:02:05 -07:00
2026-07-05 14:48:28 -07:00
2026-07-16 05:44:43 -07:00
2026-07-07 20:11:08 -07:00
2026-07-12 05:08:13 -04:00
2026-06-27 15:59:00 -07:00
2026-06-24 00:54:18 +05:30
2026-07-05 13:42:46 -07:00
2026-07-16 06:14:56 -07:00
2026-07-11 12:28:55 +05:30
2026-07-05 13:42:46 -07:00
2026-07-07 21:13:19 -07:00
2026-06-11 10:49:47 -07:00
2026-07-03 01:05:22 -07:00
2026-05-28 15:14:05 +10:00
2026-05-28 22:26:25 -07:00
2026-05-25 01:20:33 -07:00
2026-05-28 22:26:25 -07:00
2026-06-27 15:59:00 -07:00
2026-07-16 07:19:36 -07:00
2026-07-12 00:26:49 -07:00
2026-05-25 01:20:33 -07:00
2026-06-27 15:59:00 -07:00
2026-07-10 00:47:51 +05:30
2026-05-15 02:31:30 -07:00
2026-07-01 23:51:54 +05:30
2026-07-14 03:23:19 -07:00
2026-06-01 19:51:03 -07:00
2026-07-16 05:44:43 -07:00
2026-07-03 20:18:00 +05:30
2026-07-16 14:30:05 +10:00
2026-06-21 16:31:56 +05:30
2026-06-30 03:27:41 -07:00
2026-07-01 02:48:36 -07:00
2026-07-06 12:26:21 -07:00
2026-06-01 16:58:58 -07:00
2026-06-27 21:30:37 -07:00
2026-07-05 13:42:46 -07:00
2026-06-24 18:56:26 -07:00
2026-06-27 20:45:31 -07:00
2026-06-30 17:29:23 -07:00
2026-07-07 04:09:35 -07:00
2026-07-14 02:59:39 +05:30
2026-07-02 19:52:18 -05:00
2026-07-06 04:58:07 -07:00
2026-05-23 05:24:57 -07:00
2026-07-16 07:19:36 -07:00
2026-07-08 16:55:32 +10:00
2026-06-27 15:59:00 -07:00
2026-07-16 05:08:56 -07:00
2026-07-15 07:39:17 -07:00
2026-06-06 18:22:38 -07:00
2026-06-30 00:59:29 -05:00
2026-07-15 07:39:42 -07:00
2026-07-11 05:43:07 -07:00
2026-07-01 16:25:48 -05:00
2026-07-16 07:33:14 -07:00
2026-07-15 07:39:17 -07:00
2026-07-09 16:13:59 -05:00
2026-07-15 07:39:17 -07:00
2026-06-21 17:06:48 -07:00
2026-07-16 07:33:14 -07:00
2026-07-05 13:42:46 -07:00
2026-07-16 15:45:07 +00:00
2026-06-19 07:46:33 -07:00
2026-06-27 15:59:00 -07:00
2026-07-15 04:56:25 -07:00
2026-07-16 00:02:09 +05:30
2026-05-26 12:48:14 -07:00
2026-06-21 19:05:27 -07:00
2026-06-30 02:08:37 -07:00
2026-06-22 19:16:47 -05:00
2026-06-18 16:48:47 -05:00
2026-07-07 04:09:35 -07:00
2026-06-06 23:07:25 +05:30
2026-05-20 09:18:23 -07:00
2026-07-14 21:08:22 -07:00
2026-07-16 06:14:58 -07:00
2026-07-15 00:10:31 -07:00
2026-06-10 00:24:06 -07:00
2026-06-13 13:47:08 -07:00
2026-07-16 04:24:14 -07:00
2026-07-12 03:05:12 -07:00
2026-07-16 07:58:04 -07:00
2026-06-12 08:51:10 +00:00
2026-06-21 22:43:48 -07:00
2026-06-19 01:53:32 +05:30
2026-06-24 00:14:49 -07:00
2026-07-06 04:58:07 -07:00
2026-07-12 23:30:52 -07:00
2026-07-02 05:10:31 -07:00
2026-06-24 13:48:38 -05:00
2026-05-23 01:07:01 -04:00
2026-07-06 11:20:47 -07:00
2026-07-13 02:00:09 -07:00
2026-07-05 13:42:46 -07:00
2026-07-15 07:39:17 -07:00
2026-06-27 15:59:00 -07:00
2026-07-05 13:42:46 -07:00
2026-06-25 16:40:26 -05:00
2026-06-25 16:40:26 -05:00
2026-07-05 19:13:20 -07:00
2026-06-25 13:52:06 -07:00
2026-07-15 00:09:24 +05:30
2026-05-28 02:36:09 -07:00
2026-05-29 00:31:44 -07:00
2026-06-08 07:03:12 -07:00
2026-07-07 15:15:37 -07:00
2026-06-27 15:59:00 -07:00
2026-07-15 09:59:38 -07:00
2026-06-17 01:04:26 +08:00
2026-06-06 18:36:40 -07:00
2026-05-29 13:24:12 -07:00
2026-06-21 19:05:27 -07:00
2026-05-28 22:26:25 -07:00
2026-06-19 07:46:33 -07:00
2026-06-29 21:33:00 +10:00
2026-07-09 19:54:02 -07:00
2026-07-07 12:36:41 -07:00
2026-07-07 13:29:58 -07:00
2026-07-05 22:04:52 -07:00
2026-07-03 13:44:00 -07:00
2026-05-17 02:29:41 -07:00
2026-06-11 07:51:01 -07:00
2026-07-07 05:11:10 -07:00
2026-07-09 19:57:54 -07:00
2026-07-12 02:59:27 -07:00
2026-05-18 20:05:23 -07:00
2026-07-14 13:58:36 -07:00
2026-06-25 16:40:26 -05:00
2026-07-14 02:59:39 +05:30
2026-05-28 22:26:25 -07:00
2026-07-05 13:42:46 -07:00
2026-06-05 03:20:10 -07:00
2026-05-19 14:25:10 -07:00
2026-07-13 15:41:00 +05:30
2026-07-16 01:17:11 -07:00
2026-06-26 14:07:43 +05:30
2026-07-07 05:12:24 -07:00
2026-07-11 12:28:55 +05:30
2026-07-13 14:53:34 -04:00
2026-07-16 07:28:22 -07:00
2026-07-16 12:36:51 +05:30
2026-06-08 11:32:43 -07:00
2026-06-09 23:21:14 -07:00
2026-07-05 23:00:34 +05:30