summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Graves <ngraves@ngraves.fr>2026-07-11 23:44:39 +0200
committerMaxim Cournoyer <maxim@guixotic.coop>2026-08-27 10:59:18 +0900
commitbc6dd90b08974de1650822ca921bb07f38cc514f (patch)
tree40d5fc6c7537d016e2789341a433bbc1aeb8d76e
parent78a64eadc35e4be92ef78c1b3b0ca6d684ea9c1f (diff)
node: Introduce a stripped-down build-system for bootstrap.
* gnu/packages/node.scm (bootstrap-node-phases, delete-dependencies*): Add essential components of a stripped-down node-build-system for bootstrap. Change-Id: I844da3e30bc5f0fc18f135f0e216f2e11b6646b1 Signed-off-by: Jelle Licht <jlicht@fsfe.org>
-rw-r--r--gnu/packages/node.scm61
1 files changed, 60 insertions, 1 deletions
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index b8601242246..a1ca3b6ac12 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -52,6 +52,7 @@
52 #:use-module (guix derivations) 52 #:use-module (guix derivations)
53 #:use-module (guix download) 53 #:use-module (guix download)
54 #:use-module (guix git-download) 54 #:use-module (guix git-download)
55 #:use-module (guix gexp)
55 #:use-module ((guix licenses) #:prefix license:) 56 #:use-module ((guix licenses) #:prefix license:)
56 #:use-module (guix packages) 57 #:use-module (guix packages)
57 #:use-module (guix utils) 58 #:use-module (guix utils)
@@ -336,7 +337,65 @@ devices.")
336 (cpe-name . "node.js") 337 (cpe-name . "node.js")
337 (hidden? . #t))))) 338 (hidden? . #t)))))
338 339
339;; Duplicate of node-semver 340;; Stripped down version of the node-build-system, avoids (json) and some
341;; niceties, resulting in a simpler but brittle phases. This allows us to work
342;; on node-build-system without recompiling node-lts for each edit.
343(define bootstrap-node-phases
344 #~(modify-phases %standard-phases
345 (add-after 'unpack 'set-home
346 (lambda _
347 (with-directory-excursion ".."
348 (let loop ((i 0))
349 (let ((dir (string-append "npm-home-" (number->string i))))
350 (if (directory-exists? dir)
351 (loop (1+ i))
352 (begin
353 (mkdir dir)
354 (setenv "HOME" (string-append (getcwd) "/" dir))
355 (format #t "set HOME to ~s~%" (getenv "HOME")))))))))
356 (add-before 'configure 'delete-lockfiles
357 (lambda _
358 (let ((lock "package-lock.json"))
359 (when (file-exists? lock)
360 (delete-file lock)))))
361 (replace 'configure
362 (lambda* (#:key inputs #:allow-other-keys)
363 (let ((npm (string-append (assoc-ref inputs "node") "/bin/npm")))
364 (invoke npm "--offline"
365 "--ignore-scripts"
366 "--install-links"
367 "--no-audit"
368 "install"))))
369 (add-before 'install 'repack
370 (lambda _
371 (invoke "tar"
372 ;; Add options suggested by https://reproducible-builds.org/docs/archives/
373 "--sort=name"
374 (string-append "--mtime=@" (getenv "SOURCE_DATE_EPOCH"))
375 "--owner=0"
376 "--group=0"
377 "--numeric-owner"
378 "-czf" "../package.tgz" ".")))
379 (delete 'build)
380 (replace 'install
381 (lambda* (#:key inputs outputs #:allow-other-keys)
382 (let ((out (assoc-ref outputs "out"))
383 (npm (string-append (assoc-ref inputs "node") "/bin/npm")))
384 (invoke npm "--prefix" #$output
385 "--global"
386 "--offline"
387 "--loglevel" "info"
388 "--production"
389 "--install-links"
390 "install" "../package.tgz"))))))
391
392(define (delete-dependencies* dependencies)
393 #~(substitute* "package.json"
394 (((string-append " *\"("
395 (string-join (list #$@dependencies) "|")
396 ")\": \".*"))
397 "")))
398
340(define-public node-semver-bootstrap 399(define-public node-semver-bootstrap
341 (package 400 (package
342 (name "node-semver") 401 (name "node-semver")