From 14065e4f69eea85503db2af6e6ef38e6ec1a6e28 Mon Sep 17 00:00:00 2001 From: Ryan Sundberg Date: Sun, 1 May 2022 23:00:13 -0700 Subject: [PATCH] gnu: node-lts: Update to 16.15.0 Keeps node-14 available for legacy use cases and graceful migration purposes. * gnu/packages/node.scm (node-lts): Update to 16.15.0 * gnu/packages/node.scm (node-14): Export previous LTS version Co-authored-by: zamfofex --- gnu/packages/node.scm | 177 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 175 insertions(+), 2 deletions(-) diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm index ce94557a8c..c0f66ef04b 100644 --- a/gnu/packages/node.scm +++ b/gnu/packages/node.scm @@ -11,6 +11,8 @@ ;;; Copyright © 2021 Simon Tournier ;;; Copyright © 2021 Guillaume Le Vaillant ;;; Copyright © 2021, 2022 Philip McGrath +;;; Copyright © 2022 zamfofex +;;; Copyright © 2022 Ryan Sundberg ;;; ;;; This file is part of GNU Guix. ;;; @@ -662,7 +664,7 @@ (define-public node-llparse-bootstrap parser definition into a C output.") (license license:expat))) -(define-public llhttp-bootstrap +(define llhttp-2 (package (name "llhttp") (version "2.1.4") @@ -732,7 +734,49 @@ (define-public llhttp-bootstrap source files.") (license license:expat))) -(define-public node-lts +(define-public llhttp-bootstrap + (package + (inherit llhttp-2) + (name "llhttp") + (version "6.0.6") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/nodejs/llhttp.git") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "1c1p39m46frpslm5yx13hj58r7s0cila03yvqp6caip5dbizpfmr")) + (modules '((guix build utils))) + (snippet + '(begin + ;; Fix imports for esbuild. + ;; https://github.com/evanw/esbuild/issues/477 + (substitute* "src/llhttp/http.ts" + (("\\* as assert") "assert")) + (substitute* "Makefile" + (("npx ts-node bin/generate.ts") + "node bin/generate.js")) + #t)))) + (build-system gnu-build-system) + (arguments + (substitute-keyword-arguments (package-arguments llhttp-2) + ((#:phases phases) + `(modify-phases ,phases + (replace 'install-src + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (src-dir (string-append out "/src")) + (src-src-dir (string-append src-dir "/src"))) + (install-file "src/llhttp.gyp" src-dir) + (install-file "src/common.gypi" src-dir) + (install-file "build/c/llhttp.c" src-src-dir) + (install-file "src/native/http.c" src-src-dir) + (install-file "src/native/api.c" src-src-dir) + #t))))))))) + +(define-public node-14 (package (inherit node) (version "14.18.3") @@ -878,6 +922,135 @@ (define-public node-lts c-ares-for-node icu4c-67 libuv-for-node + llhttp-2 + brotli + `(,nghttp2 "lib") + openssl + python-wrapper ;; for node-gyp (supports python3) + zlib)))) + +(define-public node-lts + (package + (inherit node-14) + (version "16.15.0") + (source (origin + (method url-fetch) + (uri (string-append "https://nodejs.org/dist/v" version + "/node-v" version ".tar.xz")) + (sha256 + (base32 + "1xx4drj3rc6kin60bm84f3wnnplglih7k588r8g34y1zqkpi5y50")) + (modules '((guix build utils))) + (snippet + `(begin + ;; Remove bundled software, where possible + (for-each delete-file-recursively + '("deps/cares" + "deps/icu-small" + "deps/nghttp2" + "deps/openssl" + "deps/zlib")) + (substitute* "Makefile" + ;; Remove references to bundled software. + (("deps/uv/uv.gyp") "") + (("deps/zlib/zlib.gyp") "")) + #t)))) + (arguments + (substitute-keyword-arguments (package-arguments node-14) + ((#:phases phases) + `(modify-phases ,phases + (replace 'delete-problematic-tests + (lambda* (#:key inputs #:allow-other-keys) + ;; Fix hardcoded /bin/sh references. + (substitute* '("lib/child_process.js" + "lib/internal/v8_prof_polyfill.js" + "test/parallel/test-child-process-spawnsync-shell.js" + "test/parallel/test-fs-write-sigxfsz.js" + "test/parallel/test-stdin-from-file-spawn.js" + "test/parallel/test-stdio-closed.js" + "test/sequential/test-child-process-emfile.js") + (("'/bin/sh'") + (string-append "'" (assoc-ref inputs "bash") "/bin/sh'"))) + + ;; Fix hardcoded /usr/bin/env references. + (substitute* '("test/parallel/test-child-process-default-options.js" + "test/parallel/test-child-process-env.js" + "test/parallel/test-child-process-exec-env.js") + (("'/usr/bin/env'") + (string-append "'" (assoc-ref inputs "coreutils") + "/bin/env'"))) + + ;; FIXME: These tests fail in the build container, but they don't + ;; 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")) + + ;; These require a DNS resolver. + (for-each delete-file + '("test/parallel/test-dns.js" + "test/parallel/test-dns-lookupService-promises.js")) + + ;; These tests require networking. + (delete-file "test/parallel/test-https-agent-unref-socket.js") + + ;; This test is timing-sensitive, and fails sporadically on + ;; slow, busy, or even very fast machines. + (delete-file "test/parallel/test-fs-utimes.js") + + ;; FIXME: This test fails randomly: + ;; https://github.com/nodejs/node/issues/31213 + (delete-file "test/parallel/test-net-listen-after-destroying-stdin.js") + + ;; FIXME: These tests fail on armhf-linux: + ;; https://github.com/nodejs/node/issues/31970 + ,@(if (target-arm32?) + '((for-each delete-file + '("test/parallel/test-zlib.js" + "test/parallel/test-zlib-brotli.js" + "test/parallel/test-zlib-brotli-flush.js" + "test/parallel/test-zlib-brotli-from-brotli.js" + "test/parallel/test-zlib-brotli-from-string.js" + "test/parallel/test-zlib-convenience-methods.js" + "test/parallel/test-zlib-random-byte-pipes.js" + "test/parallel/test-zlib-write-after-flush.js"))) + '()) + + ;; These tests have an expiry date: they depend on the validity of + ;; TLS certificates that are bundled with the source. We want this + ;; package to be reproducible forever, so remove those. + ;; TODO: Regenerate certs instead. + (for-each delete-file + '("test/parallel/test-tls-passphrase.js" + "test/parallel/test-tls-server-verify.js" + "test/parallel/test-https-selfsigned-no-keycertsign-no-crash.js")))) + (replace 'replace-llhttp-sources + (lambda* (#:key inputs #:allow-other-keys) + ;; Replace pre-generated llhttp sources + (delete-file-recursively "deps/llhttp") + (copy-recursively (string-append (assoc-ref inputs "llhttp") "/src") + "deps/llhttp"))))))) + (native-inputs + (list ;; Runtime dependencies for binaries used as a bootstrap. + c-ares-for-node + brotli + icu4c + libuv-for-node + `(,nghttp2 "lib") + openssl + zlib + ;; Regular build-time dependencies. + perl + pkg-config + procps + python + util-linux)) + (inputs + (list bash-minimal + coreutils + c-ares-for-node + icu4c + libuv-for-node llhttp-bootstrap brotli `(,nghttp2 "lib") -- 2.34.0