cbaines pushed a commit to branch master
in repository guix.

commit acb256d4583caa48e601c8cd0572ee4f269887fc
Author: Christopher Baines <[email protected]>
AuthorDate: Sun Dec 15 22:09:36 2024 +0000

    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
---
 doc/guix.texi         |  6 ++++++
 gnu/services/guix.scm | 46 ++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 9454fa365c..08ffbc36d7 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -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
 
diff --git a/gnu/services/guix.scm b/gnu/services/guix.scm
index 6c58b3a292..7a399238ef 100644
--- a/gnu/services/guix.scm
+++ b/gnu/services/guix.scm
@@ -100,6 +100,8 @@
             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 @@
                     (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 @@ ca-certificates.crt file in the system profile."
 
 (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 @@ ca-certificates.crt file in the system profile."
                 #: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))

Reply via email to