diff options
| author | Nicolas Graves <ngraves@ngraves.fr> | 2026-07-11 23:44:39 +0200 |
|---|---|---|
| committer | Maxim Cournoyer <maxim@guixotic.coop> | 2026-08-27 10:59:18 +0900 |
| commit | bc6dd90b08974de1650822ca921bb07f38cc514f (patch) | |
| tree | 40d5fc6c7537d016e2789341a433bbc1aeb8d76e | |
| parent | 78a64eadc35e4be92ef78c1b3b0ca6d684ea9c1f (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.scm | 61 |
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") |
