You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(release): build the Linux x64 Node addon against glibc 2.17 #1670
The Linux x64 Node addon (@curatelabs/graphforge-linux-x64-gnu) needs glibc 2.39, so it fails to load on older glibc distributions: Ubuntu 22.04 (2.35), Debian 12 (2.36), RHEL 9 (2.34) and Amazon Linux 2023 (2.34). Nothing declares the requirement. The package's napi metadata says only libc: glibc.
The other Linux artifacts already target glibc 2.17:
napi build --target x86_64-unknown-linux-gnu natively on blacksmith-4vcpu-ubuntu-2404 (glibc 2.39)
2.39
The Bazel-built addon had the same 2.39 floor, so this is not a regression from #1645. It was measured on the Binding RC run 36658527263 artifact graphforge.linux-x64-gnu.node with objdump -T | grep -oE 'GLIBC_[0-9.]+' | sort -Vu | tail -1.
Scope
Build the Linux x64 addon against glibc 2.17, the same floor as the wheel and the aarch64 addon. Use the napi cross toolchain (--use-napi-cross), zig, or a manylinux2014 container, and keep running the lane's native execution contract on the built addon.
Add a fail-closed Binding RC step that reads the addon's highest GLIBC_ symbol and refuses anything above the declared floor, as the wheel tag step does for Python.
Acceptance criteria
A Binding RC run on main produces a Linux x64 addon whose highest glibc symbol is at most 2.17, and the lane's native smoke, parity and async-error tests pass on that addon.
The new floor check fails a deliberately mutated build (for example, a native host build), shown by a policy test or a mutation run.
Closed by hand. GitHub is not auto-closing from Closes #N right now. #1678 landed as 97fe6d825 on main, and both of its files are identical to the reviewed head c6b2353e5.
Criterion 1: Binding RC on main.Run 36725552120 on 97fe6d82 concluded success, with no failed or cancelled jobs.
Addon (from the run's artifacts)
Highest glibc symbol (readelf --dyn-syms)
Floor step log
graphforge.linux-x64-gnu.node
GLIBC_2.16 (was 2.39)
glibc_required=2.16 floor=2.17
graphforge.linux-arm64-gnu.node
GLIBC_2.17
glibc_required=2.17 floor=2.17
The downloaded x64 addon's version() returns 0.5.2.
The x64 lane built on Node 22 (node-version: 22) for the napi cross toolchain, then ran "Execute the addon on the Node engines floor" (node: v20.20.0).
On Node 20 the native contract passed: smoke # pass 8 / # fail 0, and parity + async-errors # pass 7 / # fail 0.
Criterion 2: the floor check fails a mutated build.
Run verbatim against the previous native-built x64 addon (run 36658527263), the step printed "needs glibc 2.39, above the declared floor 2.17" and exited 1.
scripts/ci/test-binding-release-candidate.py refuses each of these mutations:
removing the x64 glibc_floor, runtime_node_version or Node 22 build pin;
Activity
DecisionNerd commentedon Sep 30, 2026
Closed by hand. GitHub is not auto-closing from
Closes #Nright now. #1678 landed as97fe6d825on main, and both of its files are identical to the reviewed headc6b2353e5.Criterion 1: Binding RC on main. Run 36725552120 on
97fe6d82concluded success, with no failed or cancelled jobs.readelf --dyn-syms)graphforge.linux-x64-gnu.nodeglibc_required=2.16 floor=2.17graphforge.linux-arm64-gnu.nodeglibc_required=2.17 floor=2.17version()returns0.5.2.node-version: 22) for the napi cross toolchain, then ran "Execute the addon on the Node engines floor" (node: v20.20.0).# pass 8 / # fail 0, and parity + async-errors# pass 7 / # fail 0.Criterion 2: the floor check fails a mutated build.
scripts/ci/test-binding-release-candidate.pyrefuses each of these mutations:glibc_floor,runtime_node_versionor Node 22 build pin;true ||;set -euo pipefail.fix(release): build the Linux x64 Node addon against glibc 2.17 (Cura…