import: Add firefox updater.

* guix/import/firefox.scm: Implement basic firefox updater.

Signed-off-by: Hilton Chain <hako@ultrarare.space>
Modified-by: Hilton Chain <hako@ultrarare.space>
This commit is contained in:
Nicolas Graves 2025-09-08 10:21:39 +02:00 committed by Hilton Chain
parent 017e4bf864
commit 7a67115e0d
No known key found for this signature in database
GPG key ID: ACC66D09CA528292

47
guix/import/firefox.scm Normal file
View file

@ -0,0 +1,47 @@
;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2025 Nicolas Graves <ngraves@ngraves.fr>
;;; This file is not part of GNU Guix but requires this naming scheme
;;; so that the %firefox-updater is properly read when using
;;; `guix refresh -L$(pwd) firefox' in nonguix root.
(define-module (guix import firefox)
#:use-module (guix import json)
#:use-module (guix memoization)
#:use-module (guix packages)
#:use-module (guix upstream)
#:export (%firefox-updater))
(define firefox-json-url "https://product-details.mozilla.org/1.0/firefox_versions.json")
(define firefox-versions
(memoize
(lambda _
(let ((alist (json-fetch firefox-json-url)))
(list (cons "firefox" (assoc-ref alist "LATEST_FIREFOX_VERSION"))
(cons "firefox-esr" (assoc-ref alist "FIREFOX_ESR")))))))
(define* (latest-release package #:key (version #f) partial-version?)
"Return an <upstream-source> for the latest-release of PACKAGE."
(let* ((name (package-name package))
(version (or version (assoc-ref (firefox-versions) name))))
(upstream-source
(package name)
(version version)
(urls
(list (string-append "https://archive.mozilla.org/pub/firefox/releases/"
version "/source/firefox-"
version ".source.tar.xz"))))))
(define (firefox-package? package)
"Return true if PACKAGE is Firefox."
(member (package-name package) (list "firefox" "firefox-esr")))
(define %firefox-updater
(upstream-updater
(name 'firefox)
(description "Updater for Firefox packages")
(pred firefox-package?)
(import latest-release)))
;;; firefox.scm ends here.