nonguix/guix/import/google-chrome.scm
Anderson Torres 314d690c3c
import: Add %google-chrome-updater.
* guix/import/google-chrome.scm: New file.
2026-01-23 20:14:25 -03:00

69 lines
2.6 KiB
Scheme

;;; SPDX-License-Identifier: GPL-3.0-or-later
;;; Copyright © 2026 Anderson Torres <anderson.torres.8519@gmail.com>
;;; This file is not part of GNU Guix but requires this naming scheme
;;; so that the %chrome-updater is properly read when using
;;; `guix refresh -L$(pwd) google-chrome-canary' in nonguix root.
(define-module (guix import google-chrome)
#:use-module (guix import json)
#:use-module (guix memoization)
#:use-module (guix packages)
#:use-module (guix upstream)
#:export (%google-chrome-updater))
(define (extract-google-chrome-version channel)
"Extract the most recent Google Chrome version from CHANNEL.
CHANNEL can be stable, beta, canary and dev; dev corresponds to unstable."
(let* ((json-data-url
(string-append "https://versionhistory.googleapis.com/v1/"
"chrome/platforms/linux/channels/"
channel
"/versions/all/releases?"
"filter=endtime=none,fraction%3E=0.5&order_by=version%20desc"))
(json-data (json-fetch json-data-url))
(release-data (assoc-ref json-data "releases"))
(release (vector-ref release-data 0))
(version (assoc-ref release "version")))
version))
(define (google-chrome-versions)
"Returns an alist of all Google Chrome versions."
(memoize
(lambda _
(list
(cons "google-chrome-stable" (extract-google-chrome-version "stable"))
(cons "google-chrome-beta" (extract-google-chrome-version "beta"))
(cons "google-chrome-canary" (extract-google-chrome-version "canary"))
(cons "google-chrome-unstable" (extract-google-chrome-version "dev"))))))
(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 ((google-chrome-versions)) name))))
(upstream-source
(package name)
(version version)
(urls
(list (string-append
"https://dl.google.com/linux/chrome/deb/pool/main/g/"
name "/" name "_" version "-1_amd64.deb"))))))
(define (google-chrome-package? package)
"Return true if PACKAGE is Google Chrome."
(member (package-name package)
(list "google-chrome-stable"
"google-chrome-beta"
"google-chrome-canary"
"google-chrome-unstable")))
(define %google-chrome-updater
(upstream-updater
(name 'google-chrome)
(description "Updater for Google Chrome packages")
(pred google-chrome-package?)
(import latest-release)))
;;; google-chrome.scm ends here.