guix_mirror_bot pushed a commit to branch master
in repository guix.
commit 69e039ee338494c407dfa066d4435e4793b0e1d3
Author: Maxim Cournoyer <[email protected]>
AuthorDate: Wed Sep 16 12:16:46 2026 +0900
gnu: node: Add a release-monitoring-url package property.
Along some tooling to make it easier to update the package to its latest LTS
version.
* gnu/packages/node.scm (latest-node-lts-version): New procedure.
(%current-node-lts-major-version): New variable.
(node-lts) [properties]: Add a release-monitoring-url property.
---
gnu/packages/node.scm | 32 +++++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/gnu/packages/node.scm b/gnu/packages/node.scm
index 88d8eda3b2a..9a17349bb4f 100644
--- a/gnu/packages/node.scm
+++ b/gnu/packages/node.scm
@@ -14,6 +14,7 @@
;;; Copyright © 2022 Hilton Chain <[email protected]>
;;; Copyright © 2024 Efraim Flashner <[email protected]>
;;; Copyright © 2024, 2025 Daniel Khodabakhsh <[email protected]>
+;;; Copyright © 2026 Maxim Cournoyer <[email protected]>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -56,12 +57,16 @@
#:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module (guix gexp)
+ #:autoload (guix http-client) (http-fetch/cached)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (ice-9 match)
+ #:autoload (json parser) (json->scm)
#:use-module (srfi srfi-1)
- #:use-module (srfi srfi-26))
+ #:use-module (srfi srfi-26)
+
+ #:export (latest-node-lts-version))
;; Stripped-down build phases for JS packages. Uses esbuild + NODE_PATH
instead
;; of npm, so editing node-build-system does not rebuild node-lts. Set the
@@ -286,6 +291,24 @@
parser definition into a C output.")
(license license:expat)))
+(define (latest-node-lts-version)
+ "Return the last Node.js LTS release version string, or #f."
+ (define release-index-url "https://nodejs.org/dist/index.json")
+ (define releases (vector->list
+ (call-with-port (http-fetch/cached release-index-url)
+ json->scm)))
+ (let ((version (and=> (find (lambda (release)
+ (assoc-ref release "lts"))
+ releases)
+ (cut assoc-ref <> "version"))))
+ (if (string-prefix? "v" version)
+ (string-drop version 1)
+ version)))
+
+;;; To find out if %current-node-lts-major-version needs to be updated, you
+;;; can use: (version-major (latest-node-lts-version))
+(define %current-node-lts-major-version "24")
+
(define-public node-lts
(package
(name "node")
@@ -656,9 +679,12 @@ devices.")
(supported-systems (fold delete %supported-systems '("powerpc-linux")))
(home-page "https://nodejs.org/")
(license license:expat)
- (properties '((max-silent-time . 7200) ;2h, needed on ARM
+ (properties `((max-silent-time . 7200) ;2h, needed on ARM
(timeout . 21600) ;6h
- (cpe-name . "node.js")))))
+ (cpe-name . "node.js")
+ (release-monitoring-url
+ . ,(format #f "https://nodejs.org/dist/latest-v~a.x/"
+ %current-node-lts-major-version))))))
(define-public node node-lts)