Repository navigation
fix: support Node 26 (ABI 147) + propagate install exit code - #81
Merged
Merged
Conversation
…BI 147) nan gained Node 26 / V8 14 support in 2.27.0; the lockfile pinned 2.24.0, which fails to compile on Node 26. node-abi ^4.24.0 mapped Node 26 to abi144 (a stale dev value); ^4.35.0 maps it to 147. Also adds --target 26.8.1 to build:gyp and build:gyp-cross so the release matrix emits ABI 147. Refs TM-3894
scripts/install.mjs logged the child exit code but never propagated it, so a failed Windows native build exited 0 and only surfaced later at require() time inside the service-install path. Exit with the child's code (and non-zero on signal/spawn error). Adds an OS_SERVICE_FORCE_NATIVE_INSTALL override so the Windows-only build path is exercisable on any OS, and a mutation-checked regression test. Refs TM-3894
windows-latest (Server 2025 / VS 18) breaks node-gyp VS detection on older Node; pin the Windows test leg to windows-2022 for legacy coverage. Refs TM-3894
deploy.yml runs only on release and the Windows prebuild cannot be built on the macOS dev host, so this branch-push gate builds the Node 26 (abi147) win32-x64 prebuild on windows-2022, asserts it exists and resolves for the running ABI, and uploads it. Never publishes. Must be removed before merge. Refs TM-3894
The test job's npm ci source-builds the native addon on Windows; Node 26's ThinLTO config makes node-gyp emit the lld-only /opt:lldltojobs that MSVC link.exe rejects. Set npm_config_enable_thin_lto/enable_lto=false so the Node 26 Windows test leg builds. Refs TM-3894
The Windows abi147 prebuild is verified (win32-x64/@NeuraLegion+os-service.abi147.node resolved for the running ABI on windows-2022 / Node 26); the temporary branch-push gate has served its purpose. deploy.yml produces the release prebuild. Refs TM-3894
aborovsky
marked this pull request as ready for review
September 3, 2026 11:16
shevchenkov-neuralegion
previously approved these changes
Sep 3, 2026
The release build job source-builds the win32 abi147 prebuild on Windows, where Node 26's ThinLTO config makes node-gyp emit the lld-only /opt:lldltojobs that MSVC link.exe rejects. Set npm_config_enable_thin_lto/ enable_lto=false on the build job's install + prebuild steps so the release publish does not fail on Windows. Refs TM-3894
shevchenkov-neuralegion
approved these changes
Sep 3, 2026
alonchin
pushed a commit
that referenced
this pull request
Sep 3, 2026
## What Migrate the `deploy.yml` release **build** job off the removed `windows-2019` runner to `windows-2022`. ## Why GitHub **removed** the `windows-2019` GitHub-hosted runner image on **2025-06-30** (deprecation began 2025-06-01) — see [actions/runner-images#12045](actions/runner-images#12045). A job that still requests `runs-on: windows-2019` is never assigned a runner: it hangs indefinitely at `Waiting for a runner to pick up this job...`. This is exactly what happened to the **v2.0.6** release deploy (stuck ~1.5h with no runner), which blocks the npm publish of the Node 26 / ABI 147 build. ## Change `deploy.yml` build job: `os: windows-2019` → `os: windows-2022` (one line). `windows-2022` is GitHub's recommended successor and is the image on which the Node 26 `win32-x64` abi147 prebuild was verified to build cleanly (the LTO-off env for the Node 26 LNK1117 issue is already on this job). No other change. ## Note The already-cut **v2.0.6** GitHub release was created from the tag *before* this fix, so its stuck deploy run won't retroactively recover — a re-run of that run (or the next release) on the fixed workflow will publish. `test.yml`'s Windows leg is already on `windows-2022` (from #81); this was the last `windows-2019` reference in the repo.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Add Node.js 26 (ABI 147) support to
@neuralegion/os-service, and fix a silent install-failure bug.Changes
nan^2.24.0→^2.28.0(Node 26 / V8 14 support) andoverrides.prebuildify.node-abi^4.24.0→^4.35.0(^4.24.0mapped Node 26 to a stale abi144;^4.35.0maps it to 147).--target 26.8.1added tobuild:gyp/build:gyp-cross.scripts/install.mjsonly logged the child exit code and never propagated it, so a failed Windows native build exited 0 and only surfaced later atrequire()time inside the service-install path. Now exits with the child's code (and non-zero on signal / spawn error). Adds anOS_SERVICE_FORCE_NATIVE_INSTALLenv override so the (Windows-only) build path is exercisable on any OS, plus a mutation-checked regression test (test/e2e/install-exit-code.test.mjs).25+26added to both test matrices; the Windows leg pinned towindows-2022(windows-latest = Server 2025 / VS 18 breaks older node-gyp VS detection); the ThinLTO-off env (npm_config_enable_thin_lto/enable_lto=false) on the Windows install step so the Node 26 source build doesn't hit LNK1117.Verification
Local, Node 26.1.0 (macOS): full suite 8/8, install-exit-code test mutation-checked (passes with the fix, FAILS without it). The Windows abi147 prebuild was verified on windows-2022 / Node 26.8.1 by a temporary branch gate (now removed): it produced
prebuilds/win32-x64/@neuralegion+os-service.abi147.nodeandnode-gyp-buildresolved that exact file for the running ABI, zero LNK1117. Full CI is 25/25 green.Explicitly NOT in scope (DO NOT TOUCH)
deploy.ymlpublish / provenance / GPR stepsRelease
The published release must carry the win32-x64 abi147 asset (human
npm publish). This unblocks bright-cli's Windows Node 26 CI leg (task 3).