services: guix-data-service: Support specifying configuration.

The database contains some tables that are effectively used for configuration.
This commit starts to expose these to the guix service, enabling the
configuration to be handled by the service.

* gnu/services/guix.scm (<guix-data-service-configuration>): Add
git-repositories and build-servers.
(guix-data-service-configuration-git-repositories,
guix-data-service-configuration-build-servers): New procedures.
(guix-data-service-shepherd-services): Add new shepherd service to setup the
database.

Change-Id: I519efd9157b60f18c7e80e3bdc92c0e3c5729334
This commit is contained in:
Christopher Baines 2024-12-15 22:09:36 +00:00
parent f3f371a4d7
commit acb256d458
No known key found for this signature in database
GPG key ID: 5E28A33B0B84F577
2 changed files with 50 additions and 2 deletions

View file

@ -40261,6 +40261,12 @@ Extra command line options for @code{guix-data-service}.
@item @code{extra-process-jobs-options} (default: @var{'()})
Extra command line options for @code{guix-data-service-process-jobs}.
@item @code{git-repositories} (default: @var{#f})
List of git-repository information to insert into the database.
@item @code{build-servers} (default: @var{#f})
List of build-server information to insert into the database.
@end table
@end deftp

View file

@ -100,6 +100,8 @@ (define-module (gnu services guix)
guix-data-service-host
guix-data-service-getmail-idle-mailboxes
guix-data-service-commits-getmail-retriever-configuration
guix-data-service-configuration-git-repositories
guix-data-service-configuration-build-servers
guix-data-service-type
@ -556,7 +558,11 @@ (define-record-type* <guix-data-service-configuration>
(default '()))
(extra-process-jobs-options
guix-data-service-extra-process-jobs-options
(default '())))
(default '()))
(git-repositories guix-data-service-configuration-git-repositories
(default #f))
(build-servers guix-data-service-configuration-build-servers
(default #f)))
(define (guix-data-service-profile-packages config)
"Return the guix-data-service package, this will populate the
@ -566,7 +572,8 @@ (define (guix-data-service-profile-packages config)
(define (guix-data-service-shepherd-services config)
(match-record config <guix-data-service-configuration>
(package user group port host extra-options extra-process-jobs-options)
(package user group port host extra-options extra-process-jobs-options
git-repositories build-servers)
(list
(shepherd-service
(documentation "Guix Data Service web server")
@ -595,6 +602,41 @@ (define (guix-data-service-shepherd-services config)
#:log-file "/var/log/guix-data-service/web.log"))
(stop #~(make-kill-destructor)))
(shepherd-service
(documentation "Guix Data Service setup database")
(provision '(guix-data-service-setup-database))
(requirement '(postgres))
(one-shot? #t)
(start
(with-extensions (cons package
;; This is a poorly constructed Guile load path,
;; since it contains things that aren't Guile
;; libraries, but it means that the Guile
;; libraries needed for the Guix Data Service
;; don't need to be individually specified here.
(append
(map second (package-inputs package))
(map second (package-propagated-inputs package))))
#~(lambda _
(use-modules (guix-data-service database)
(guix-data-service model git-repository)
(guix-data-service model build-server))
(begin
((@ (guix-data-service database) run-sqitch))
#$@(if git-repositories
#~(((@ (guix-data-service model git-repository)
specify-git-repositories)
'(#$@git-repositories)))
'())
#$@(if build-servers
#~(((@ (guix-data-service model build-server)
specify-build-servers)
'(#$@build-servers)))
'())))))
(auto-start? #t))
(shepherd-service
(documentation "Guix Data Service process jobs")
(provision '(guix-data-service-process-jobs))