diff options
| author | Maxim Cournoyer <maxim@guixotic.coop> | 2026-06-04 22:25:00 +0900 |
|---|---|---|
| committer | Maxim Cournoyer <maxim@guixotic.coop> | 2026-06-24 14:29:03 +0900 |
| commit | ff2b3e6b1032e31fd137804d538f4cac7ec325e6 (patch) | |
| tree | fc9766cd9d62bc9ff9caa4947affa89a49cd5e07 | |
| parent | 0311b0e1f8a804db26703ed761d628cded0b542b (diff) | |
import: npm-binary: Do not hard-code version in URL.
The URL is now made to look like:
(uri (string-append "https://registry.npmjs.org/undici-types/-/"
"undici-types-" version ".tgz"))
avoiding hard-coding the version string in the URL directly.
* guix/import/npm-binary.scm (npm-package->package-sexp)
<sexpify-url/maybe>: New nested procedure, used to post-process the dist URL.
Change-Id: I518af46a5cb731f52bb5e194e4cc27cfeb2545d6
| -rw-r--r-- | guix/import/npm-binary.scm | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/guix/import/npm-binary.scm b/guix/import/npm-binary.scm index 9c4e0ca57a2..ba97f35edfb 100644 --- a/guix/import/npm-binary.scm +++ b/guix/import/npm-binary.scm | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net> | 3 | ;;; Copyright © 2021 Lars-Dominik Braun <lars@6xq.net> |
| 4 | ;;; Copyright © 2020, 2023, 2024 Jelle Licht <jlicht@fsfe.org> | 4 | ;;; Copyright © 2020, 2023, 2024 Jelle Licht <jlicht@fsfe.org> |
| 5 | ;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr> | 5 | ;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr> |
| 6 | ;;; Copyright © 2026 Maxim Cournoyer <maxim@guixotic.coop> | ||
| 6 | ;;; | 7 | ;;; |
| 7 | ;;; This file is part of GNU Guix. | 8 | ;;; This file is part of GNU Guix. |
| 8 | ;;; | 9 | ;;; |
| @@ -37,6 +38,7 @@ | |||
| 37 | #:use-module (srfi srfi-2) | 38 | #:use-module (srfi srfi-2) |
| 38 | #:use-module (srfi srfi-26) | 39 | #:use-module (srfi srfi-26) |
| 39 | #:use-module (srfi srfi-41) | 40 | #:use-module (srfi srfi-41) |
| 41 | #:use-module (srfi srfi-71) | ||
| 40 | #:use-module (srfi srfi-9) | 42 | #:use-module (srfi srfi-9) |
| 41 | #:use-module (web client) | 43 | #:use-module (web client) |
| 42 | #:use-module (web response) | 44 | #:use-module (web response) |
| @@ -219,12 +221,39 @@ | |||
| 219 | (string-drop-right url 7) | 221 | (string-drop-right url 7) |
| 220 | url)) | 222 | url)) |
| 221 | 223 | ||
| 224 | (define (sexpify-url/maybe dist-url name version) | ||
| 225 | ;; Return a S-exp for the package URL, which is computed using the package | ||
| 226 | ;; version, if it matches the distribution tarball DIST-URL. | ||
| 227 | |||
| 228 | ;; The newer "scoped" packages use a different scheme for their dist URL | ||
| 229 | ;; (see: <https://docs.npmjs.com/about-scopes>). | ||
| 230 | (let* ((scope name (if (and (string-prefix? "@" name) | ||
| 231 | (string-contains name "/")) | ||
| 232 | (apply values (string-split name #\/)) | ||
| 233 | (values #f name))) | ||
| 234 | (versioned-url (string-append (%npm-registry) | ||
| 235 | (if scope | ||
| 236 | (string-append "/" scope "/") | ||
| 237 | "/") | ||
| 238 | name "/-/" name "-" version ".tgz"))) | ||
| 239 | (if (string=? dist-url versioned-url) | ||
| 240 | `(string-append ,(string-append (%npm-registry) | ||
| 241 | (if scope | ||
| 242 | (string-append "/" scope "/") | ||
| 243 | "/") | ||
| 244 | name) | ||
| 245 | ,(string-append "/-/" name "-") version ".tgz") | ||
| 246 | dist-url))) | ||
| 247 | |||
| 222 | (match npm-package | 248 | (match npm-package |
| 223 | (($ <package-revision> | 249 | (($ <package-revision> |
| 224 | name version home-page dependencies dev-dependencies | 250 | name version home-page dependencies dev-dependencies |
| 225 | peer-dependencies license description dist) | 251 | peer-dependencies license description dist) |
| 226 | (let* ((name (npm-name->name name)) | 252 | (let* ((version-string (semver->string |
| 227 | (url (dist-tarball dist)) | 253 | (package-revision-version npm-package))) |
| 254 | (dist-url (dist-tarball dist)) | ||
| 255 | (url (sexpify-url/maybe dist-url name version-string)) | ||
| 256 | (name (npm-name->name name)) | ||
| 228 | (home-page (if (string? home-page) | 257 | (home-page (if (string? home-page) |
| 229 | (sanitize-home-page-url home-page) | 258 | (sanitize-home-page-url home-page) |
| 230 | (string-append %default-page "/" (uri-encode name)))) | 259 | (string-append %default-page "/" (uri-encode name)))) |
| @@ -250,11 +279,11 @@ | |||
| 250 | (values | 279 | (values |
| 251 | `(package | 280 | `(package |
| 252 | (name ,name) | 281 | (name ,name) |
| 253 | (version ,(semver->string (package-revision-version npm-package))) | 282 | (version ,version-string) |
| 254 | (source (origin | 283 | (source (origin |
| 255 | (method url-fetch) | 284 | (method url-fetch) |
| 256 | (uri ,url) | 285 | (uri ,url) |
| 257 | (sha256 (base32 ,(hash-url url))))) | 286 | (sha256 (base32 ,(hash-url dist-url))))) |
| 258 | (build-system node-build-system) | 287 | (build-system node-build-system) |
| 259 | (arguments | 288 | (arguments |
| 260 | (list | 289 | (list |
