Skip to content

nodejs-bin: add riscv64 build for 18.4.0a4 - #4747

Draft
luhenry wants to merge 6 commits into
mainfrom
port/nodejs-bin
Draft

luhenry wants to merge 6 commits into
mainfrom
port/nodejs-bin

Conversation

@luhenry

@luhenry luhenry commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Repackages a prebuilt Node.js 18.4.0 release archive (node, npm, npx, corepack) as a py3-none wheel; nothing is compiled. Upstream publishes no riscv64 wheel.

Mirrors upstream's test.yaml.

Differs from upstream

  • Builds only linux-riscv64 - other platforms are already on PyPI.
  • Checks out the commit 07c0845 - upstream publishes no git tags.
  • Builds in the manylinux_2_39 image - provides libarchive for libarchive-c.

Testing

  • Upstream's four python -W error -m nodejs.* --version checks, plus its tests/ pytest suite, on the runner instead of in Debian/Alpine containers.

License: Wheel bundles Node.js and its npm dependencies (MIT and permissive); their licence texts ship in nodejs/ exactly as in upstream's wheels.

Patches

  • 0001-Add-linux-riscv64-from-unofficial-builds.patch - To upstream [upstream has not released since 2022]. nodejs.org ships no riscv64 archive; uses unofficial-builds.nodejs.org as upstream already does for musl.

Repackages the unofficial-builds.nodejs.org linux-riscv64 Node.js
archive with upstream's own make_wheels.py, which already sources its
linux-x64-musl wheel from unofficial-builds.
luhenry added a commit that referenced this pull request Nov 9, 2026
wheel 0.40 changed WheelFile.close() to pass a plain path to
writestr() for the RECORD entry instead of constructing a ZipInfo;
make_wheels.py's ReproducibleWheelFile.writestr() requires a ZipInfo
and raised ValueError("ZipInfo required"), failing the build.
uv rejects manylinux_2_28_riscv64 outright on every riscv64 host:
'No solution found... has no wheels with a matching platform tag',
even though the test runner's uv-managed Python resolves
manylinux_2_39_riscv64 and glibc 2.39 > 2.28. This isn't a tag
comparison bug: uv's own riscv64 manylinux floor is hardcoded to
2_31 (uv-platform-tags Arch::get_minimum_manylinux_minor), so
2_28_riscv64 is never even generated as a compatible tag on any
riscv64 host, matching this repo's porting-playbook gotcha 642.
PyPA also publishes no manylinux_riscv64 base image below 2_39, the
one this workflow already builds in, so 2_39 is the correct tag
regardless of the node binary's own lower GLIBC_2.28 requirement.
_publish-wheel.yml now requires a matrix input (main's "publish:
Validate effective wheel targets"), but this PR branch forked before
that landed and nodejs-bin has never been merged to main, so
build-nodejs-bin.yml never picked up the matching one-line update
every already-published package's workflow got. The merge ref
combines the new required-input _publish-wheel.yml with this branch's
old build-nodejs-bin.yml, so any run has failed startup with "Input
matrix is required, but not provided".

Pass it the same way the mass-update commit did for every other
package's publish job.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant