[PATCH 0/4] Bump node-lts to 22.12.0

  • Open
  • quality assurance status badge
Details
2 participants
  • Thompson, David
  • jlicht
Owner
unassigned
Submitted by
jlicht
Severity
normal

Debbugs page

J
J
jlicht wrote 5 days ago
(address . guix-patches@gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
cover.1736092552.git.jlicht@fsfe.org
From: Jelle Licht <jlicht@fsfe.org>

Hi all, this series bumps node-lts to version 22.12.0.

I had to reintroduce a c-ares package variant specific to node-lts, as well as
disable some tests that did not work in the build container for one reason or
another.

To keep the llhttp-bootstrap dance as short as possible, I've adapted a
so-called ponyfill[0] for Object.fromEntries so we can directly build llhttp
9.2.1 using our node-bootstrap package.


Jelle Licht (4):
gnu: Add c-ares-for-node-lts.
gnu: libuv-for-node-lts: Update to 1.49.1.
gnu: llhttp-bootstrap: Update to 9.2.1.
gnu: node-lts: Update to 22.12.0.

gnu/local.mk | 1 +
gnu/packages/adns.scm | 15 ++++++
gnu/packages/libevent.scm | 12 +----
gnu/packages/node.scm | 23 ++++++----
.../llhttp-ponyfill-object-fromentries.patch | 46 +++++++++++++++++++
5 files changed, 77 insertions(+), 20 deletions(-)
create mode 100644 gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch


base-commit: 67a535351f8678969e412e8dba9197a883b524d0
--
2.47.1
J
J
jlicht wrote 5 days ago
[PATCH 1/4] gnu: Add c-ares-for-node-lts.
(address . 75384@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
198f8648dea237e3619376fe0b3e59cf481e10a5.1736092552.git.jlicht@fsfe.org
From: Jelle Licht <jlicht@fsfe.org>

* gnu/packages/adns.scm (c-ares-for-node-lts): New variable.

Change-Id: I547272f3fa3419a7659bf5b2d91a3e917c20d434
---
gnu/packages/adns.scm | 15 +++++++++++++++
1 file changed, 15 insertions(+)

Toggle diff (28 lines)
diff --git a/gnu/packages/adns.scm b/gnu/packages/adns.scm
index 1097b84062..8f37d970c3 100644
--- a/gnu/packages/adns.scm
+++ b/gnu/packages/adns.scm
@@ -148,6 +148,21 @@ (define-public c-ares
multiple clients and programs with graphical user interfaces.")
(license (x11-style "https://c-ares.haxx.se/license.html"))))
+(define-public c-ares-for-node-lts
+ (hidden-package
+ (package
+ (inherit c-ares)
+ (version "1.34.4")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "https://github.com/c-ares/c-ares/releases/download/v"
+ version "/c-ares-" version
+ ".tar.gz"))
+ (sha256
+ (base32
+ "0br2msk3bpl5myhjp9vr5j2scpspvbg2fpnz69dcrr4ycpnxnf7s")))))))
+
;; gRPC requires a c-ares built with CMake in order to get the .cmake modules.
;; We can not build c-ares itself with CMake because that would introduce a
;; circular dependency through nghttp2.
--
2.47.1
J
J
jlicht wrote 5 days ago
[PATCH 2/4] gnu: libuv-for-node-lts: Update to 1.49.1.
(address . 75384@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
922b4c4235913b3d76f79015d52b589145a06051.1736092552.git.jlicht@fsfe.org
From: Jelle Licht <jlicht@fsfe.org>

* gnu/packages/libevent.scm (libuv-for-node-lts): Update to 1.49.1.

Change-Id: I8acf2fb174fffa90f7c3271088d0476c682df904
---
gnu/packages/libevent.scm | 12 ++----------
1 file changed, 2 insertions(+), 10 deletions(-)

Toggle diff (31 lines)
diff --git a/gnu/packages/libevent.scm b/gnu/packages/libevent.scm
index 202deaea47..40de182ff8 100644
--- a/gnu/packages/libevent.scm
+++ b/gnu/packages/libevent.scm
@@ -164,22 +164,14 @@ (define-public libuv-for-node-lts
(package
(inherit libuv)
(name "libuv")
- (version "1.46.0")
+ (version "1.49.1")
(source (origin
(method url-fetch)
(uri (string-append "https://dist.libuv.org/dist/v" version
"/libuv-v" version ".tar.gz"))
(sha256
(base32
- "1knxvp6bl3y0c87cch1id0z7m7rb6igx55ci93qnbp4zifaq67qi"))
- (modules '((guix build utils)))
- (snippet
- '(begin
- ;; Disable io_uring by default due to CVE-2024-22017. Can be removed once
- ;; https://github.com/libuv/libuv/issues/4468 is released and compatible
- ;; with Node.js
- (substitute* "src/unix/linux.c"
- (("val == NULL \\|\\|") "val != NULL &&"))))))
+ "0rk73b373zb495jd0qsl2gpnc8fc60jbhn3aayqnglfgyhagg14d"))))
(properties '((hidden? . #t)))))
(define-public libuv-for-r-httpuv
--
2.47.1
J
J
jlicht wrote 5 days ago
[PATCH 4/4] gnu: node-lts: Update to 22.12.0.
(address . 75384@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
579454384194171753a365f1aa6d3aaab36a2256.1736092552.git.jlicht@fsfe.org
From: Jelle Licht <jlicht@fsfe.org>

* gnu/packages/node.scm (node-lts): Update to 22.12.0.
[#:phases]<delete-problematic-tests>: Delete tests that fail due to the build
container. Delete tests that require a DNS resolver.
[inputs]: Replace c-ares by c-ares-for-node-lts.
Replace icu4c by icu4c-73.
[native-inputs]: Replace c-ares by c-ares-for-node-lts.
Replace icu4c by icu4c-73.

Change-Id: I8cbc790bd82c55b48f8917e6405b37569b29dc1c
---
gnu/packages/node.scm | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)

Toggle diff (65 lines)
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 6c0031aa5a..75a1a12c53 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -750,14 +750,14 @@ (define-public llhttp-bootstrap
(define-public node-lts
(package
(inherit node-bootstrap)
- (version "20.18.1")
+ (version "22.12.0")
(source (origin
(method url-fetch)
(uri (string-append "https://nodejs.org/dist/v" version
"/node-v" version ".tar.gz"))
(sha256
(base32
- "1f180vgr6lrg4gs48q5c414j5sdwaqqp1vnswwr3pvryhznqrbav"))
+ "1qrcn9hm85bmh81ircaa0vmxrqmiip1iwczvpsyn9sdn0b0ffmri"))
(modules '((guix build utils)))
(snippet
'(begin
@@ -838,14 +838,16 @@ (define-public node-lts
;; seem to be indicative of real problems in practice.
(for-each delete-file
'("test/parallel/test-cluster-primary-error.js"
- "test/parallel/test-cluster-primary-kill.js"))
+ "test/parallel/test-cluster-primary-kill.js"
+ "test/parallel/test-node-run.js"))
;; These require a DNS resolver.
(for-each delete-file
'("test/parallel/test-dns.js"
"test/parallel/test-dns-lookupService-promises.js"
"test/parallel/test-net-socket-connect-without-cb.js"
- "test/parallel/test-tcp-wrap-listen.js"))
+ "test/parallel/test-tcp-wrap-listen.js"
+ "test/report/test-report-exclude-network.js"))
;; These tests require networking.
(for-each delete-file
@@ -956,9 +958,9 @@ (define-public node-lts
(chmod file #o555))))))))
(native-inputs
(list ;; Runtime dependencies for binaries used as a bootstrap.
- c-ares
+ c-ares-for-node-lts
brotli
- icu4c
+ icu4c-73
libuv-for-node-lts
`(,nghttp2 "lib")
openssl
@@ -973,8 +975,8 @@ (define-public node-lts
(inputs
(list bash-minimal
coreutils
- c-ares
- icu4c
+ c-ares-for-node-lts
+ icu4c-73
libuv-for-node-lts
llhttp-bootstrap
brotli
--
2.47.1
J
J
jlicht wrote 5 days ago
[PATCH 3/4] gnu: llhttp-bootstrap: Update to 9.2.1.
(address . 75384@debbugs.gnu.org)(name . Jelle Licht)(address . jlicht@fsfe.org)
276a2bf80aa768835c189a361d7b29ec5de1656d.1736092552.git.jlicht@fsfe.org
From: Jelle Licht <jlicht@fsfe.org>

* gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch: New patch.
* gnu/local.mk (dist_patch_DATA): Register patch.
* gnu/packages/node.scm (llhttp-bootstrap): Update to 9.2.1.
[source]: Use patch.
---
gnu/local.mk | 1 +
gnu/packages/node.scm | 5 +-
.../llhttp-ponyfill-object-fromentries.patch | 46 +++++++++++++++++++
3 files changed, 50 insertions(+), 2 deletions(-)
create mode 100644 gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch

Toggle diff (90 lines)
diff --git a/gnu/local.mk b/gnu/local.mk
index f118fe4442..61f91d2e9f 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1812,6 +1812,7 @@ dist_patch_DATA = \
%D%/packages/patches/mcrypt-CVE-2012-4527.patch \
%D%/packages/patches/libmemcached-build-with-gcc7.patch \
%D%/packages/patches/libmhash-hmac-fix-uaf.patch \
+ %D%/packages/patches/llhttp-ponyfill-object-fromentries.patch \
%D%/packages/patches/lvm2-no-systemd.patch \
%D%/packages/patches/maturin-no-cross-compile.patch \
%D%/packages/patches/mecab-variable-param.patch \
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 20acffb3df..6c0031aa5a 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -679,7 +679,7 @@ (define-public node-llparse-bootstrap
(define-public llhttp-bootstrap
(package
(name "llhttp")
- (version "8.1.2")
+ (version "9.2.1")
(source (origin
(method git-fetch)
(uri (git-reference
@@ -688,7 +688,8 @@ (define-public llhttp-bootstrap
(file-name (git-file-name name version))
(sha256
(base32
- "1808y8mpdcmsi8rxndilngg4nn2fbqfgb29f47kk9mmdpqg5s17r"))
+ "0mzg19aqb1am498gms0z75cwd5kmfg9p78b1hhxw67019nsjcbac"))
+ (patches (search-patches "llhttp-ponyfill-object-fromentries.patch"))
(modules '((guix build utils)))
(snippet
'(begin
diff --git a/gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch b/gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch
new file mode 100644
index 0000000000..16ac6b45f6
--- /dev/null
+++ b/gnu/packages/patches/llhttp-ponyfill-object-fromentries.patch
@@ -0,0 +1,46 @@
+diff --git a/src/llhttp/constants.ts b/src/llhttp/constants.ts
+index 226342e..1a4c93a 100644
+--- a/src/llhttp/constants.ts
++++ b/src/llhttp/constants.ts
+@@ -1,4 +1,4 @@
+-import { enumToMap } from './utils';
++import { enumToMap, fromEntries } from './utils';
+
+ export type IntDict = Record<string, number>;
+
+@@ -328,7 +328,7 @@ export const METHODS_RTSP = [
+
+ export const METHOD_MAP = enumToMap(METHODS);
+
+-export const H_METHOD_MAP = Object.fromEntries(
++export const H_METHOD_MAP = fromEntries(
+ Object.entries(METHODS).filter(([ k ]) => k.startsWith('H'))
+ );
+
+diff --git a/src/llhttp/utils.ts b/src/llhttp/utils.ts
+index 2251125..5ac4aeb 100644
+--- a/src/llhttp/utils.ts
++++ b/src/llhttp/utils.ts
+@@ -1,5 +1,13 @@
+ import { IntDict } from './constants';
+
++/*! fromentries. MIT License. Copyright (c) 2018-2020 Feross Aboukhadijeh */
++export function fromEntries (iterable) {
++ return [...iterable].reduce((obj, [key, val]) => {
++ obj[key] = val
++ return obj
++ }, {})
++}
++
+ export function enumToMap(
+ obj: IntDict,
+ filter: ReadonlyArray<number> = [],
+@@ -8,7 +16,7 @@ export function enumToMap(
+ const emptyFilter = (filter?.length ?? 0) === 0;
+ const emptyExceptions = (exceptions?.length ?? 0) === 0;
+
+- return Object.fromEntries(Object.entries(obj).filter(([ , value ]) => {
++ return fromEntries(Object.entries(obj).filter(([ , value ]) => {
+ return (
+ typeof value === 'number' &&
+ (emptyFilter || filter.includes(value)) &&
\ No newline at end of file
--
2.47.1
T
T
Thompson, David wrote 2 days ago
Re: [bug#75384] [PATCH 0/4] Bump node-lts to 22.12.0
(name . Jelle Licht)(address . jlicht@fsfe.org)(address . 75384@debbugs.gnu.org)
CAJ=RwfaVbSGxRmHotkfF327ketKktd+h8JeCNjcr-ZPinTSt=Q@mail.gmail.com
Hey Jelle,

On Sun, Jan 5, 2025 at 12:49 PM <jlicht@fsfe.org> wrote:
Toggle quote (5 lines)
>
> From: Jelle Licht <jlicht@fsfe.org>
>
> Hi all, this series bumps node-lts to version 22.12.0.

I tested the patch series and everything compiled successfully. I
also tested it with WebAssembly binaries generated by Hoot, to see if
we could drop our custom, non-bootstrapped Node build in that project,
and indeed we can!

The code all looks good to me! Thank you for doing this important
work! I must admit I briefly looked into upgrading Node back when the
22 series was fresh and couldn't figure it out.

Now, there's a practical issue for getting this merged. `guix refresh
-l node` tells me this:

Building the following 162 packages would ensure 280 dependent
packages are rebuilt: ccwl@0.3.0
ungoogled-chromium-wayland@112.0.5615.165-1 emacs-nodejs-repl@0.2.5
emacs-dape@0.19.0 icedove@115.16.3 geierlein@0.9.13
icedove-minimal@115.16.3 icecat-l10n@115.18.0-guix2
icecat-minimal@115.18.0-guix2 icedove-l10n@115.16.3 js-mathjax@3.2.0
r-metap@1.11 r-mmuphin@1.18.1 r-spacexr@2.2.1-1.0a0861e r-altmeta@4.2
r-fmri@1.9.12.1 r-puniform@0.2.7 r-prospectr@0.2.7 r-untb@1.7-7-1
librewolf@133.0-1 node-path-key@4.0.0 node-sqlite3@5.0.2
node-once@1.4.0 node-mersenne@0.0.4 node-normalize-path@3.0.0
node-statsd-parser@0.0.4 node-safe-stable-stringify@2.4.3
node-stack-trace@0.0.10-1.4fd379e node-color-name@1.1.3
node-env-variable@0.0.4 node-crx3@1.1.3 node-segfault-handler@1.3.0
node-irc@0.5.2 node-global-gradle-clean@1.0.1 node-serialport@9.2.7
bap@2.6.0-alpha-0.f995d28 frama-c@29.0 ocaml-mirage-logs@1.2.0
fpm@1.15.1 komikku@1.46.0 python-bulkvis@2.0.0-2.00a82a9
python-ikarus@0.0.2 python-pyrodigal@3.3.0 kitsas@5.7 falkon@24.05.2
ktorrent@24.05.2 calligra@4.0.1 ghostwriter@24.05.2 knotes@24.05.2
kaccounts-providers@24.05.2 kdepim-runtime@24.05.2 korganizer@24.05.2
merkuro@24.05.2 kmail@24.05.2 plasma-pass@1.2.2 plasma@6.1.4
khelpcenter@24.05.2 akregator@24.05.2 python-apscheduler@3.10.4
syncplay@1.7.3 qutebrowser@3.3.1 stellarium@24.3
emacs-ob-sclang@0.1-1.cd3f3c8 ecl-cl-collider@2018.7.15-0.a469088
cl-collider@2018.7.15-0.a469088 zeal@0.7.1 qolibri@2.1.4
openboard@1.7.3 fcitx5-chinese-addons@5.1.3 qmapshack@1.17.1
luminance-hdr@2.6.0 kvirc@5.2.6 marble-qt@24.05.2 kdevelop@24.05.2
movim-desktop@0.14.0-3.83d583b hydrus-network@495 mygnuhealth@2.2.1
freecad@1.0.0 rfcat@1.9.6 onionshare@2.6 emacs-calibredb@2.13.0
anki@2.1.16 openmolar@1.1.6-g81838c85 orange@3.32.0 sdrangel@7.22.2
openfoam-com@2212 openfoam-org@10.20230119 nextcloud-client@3.8.2
openshot@3.2.1 openconnect-sso@0.8.0 kiwix-desktop@2.3.1
ruby-autoprefixer-rails@10.4.13.0 mullvadbrowser@14.0.3
torbrowser@14.0.3 tree-sitter-julia@0.19.0 tree-sitter-clojure@0.0.11
tree-sitter-rust@0.20.4 tree-sitter-ocaml@0.20.1
tree-sitter-java@0.20.1 tree-sitter-erlang@0.4.0-0.57e6951
tree-sitter-prisma@1.4.0 tree-sitter-bibtex@0.1.0-0.ccfd77d
tree-sitter-css@0.19.0 tree-sitter-dockerfile@0.1.2
tree-sitter-scala@0.20.2 tree-sitter-c-sharp@0.20.0
tree-sitter-scheme@0.2.0-0.67b90a3 tree-sitter-vhdl@0.1.1-0.a3b2d84
tree-sitter-markdown-gfm@0.7.1 tree-sitter-verilog@1.0.0-0.075ebfc
tree-sitter-go@0.20.0 tree-sitter-json@0.20.0 tree-sitter-html@0.19.0
tree-sitter-matlab@1.0.2-0.79d8b25 tree-sitter-cpp@0.20.3
tree-sitter-r@0.0.1-0.80efda5 tree-sitter-ungrammar@0.0.2-0.debd26f
tree-sitter-haskell@0.14.0-0.3bdba07
tree-sitter-plantuml@1.0.0-0.bea443e tree-sitter-elm@5.6.3
tree-sitter-nix@0.0.0 tree-sitter-racket@0.1.0-0.1a5df02
tree-sitter-ron@0.2.0 tree-sitter-bash@0.20.4 tree-sitter-gomod@1.0.0
tree-sitter-cmake@0.4.1 tree-sitter-elixir@0.19.0-0.b20eaa7
emacs-devicetree-ts-mode@0.3 tree-sitter-kotlin@0.3.6
tree-sitter-hcl@1.1.0 emacs-jsdoc@0.3 python-textual@0.50.1
tree-sitter-markdown@0.1.1 tree-sitter-latex@0.3.0
tree-sitter-awk@0.6.2 tree-sitter-org@1.3.1-0.081179c
emacs-combobulate@0.1-1.c7e4670 tree-sitter-kdl@1.1.0
tree-sitter-tlaplus@1.0.8 tree-sitter-meson@1.2-0.3d6dfbd
tree-sitter-lua@0.0.19 tree-sitter-heex@0.6.0
tree-sitter-ruby@0.19.0-0.206c707 tree-sitter-php@0.19.0-0.f860e59
pigx@0.0.3 laminar@1.3 r-zra@0.2 r-aasea@1.1.0 r-pcaexplorer@3.0.0
r-mlinterfaces@1.86.0 r-tidyposterior@1.0.1 markdeep@1.16 mate@1.28.2
gr-satellites@4.6.0 gqrx@2.17.6 urh@2.9.8 gnss-sdr@0.0.19
gr-dsd@1.0.0-0.f9b9936 vlang@0.2.4 r-shinydashboardplus@2.0.5
archivebox@0.6.2 node-openzwave-shared@1.7.2

This would be quite a disruptive change to push to the master branch.
Is there anyone who can help get these patches pre-baked in CI before
merging? That would be much appreciated!

- Dave
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 75384@patchwise.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 75384
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch