guix_mirror_bot pushed a commit to branch javascript-team in repository guix.
commit 782c7cdf98508a3d8285ac99493ff1e88491b0f7 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)
