about summary refs log tree commit diff
path: root/guix
diff options
context:
space:
mode:
authorArun Isaac2025-03-28 01:34:03 +0000
committerArun Isaac2025-03-28 03:26:47 +0000
commit7519f07374cb7b617aa5efc30619e954fd260499 (patch)
tree60bf663f033f325d16bc55e9f804497f003f31fc /guix
parent4fa319a958c92238094c0a989fdc44f9b17131b7 (diff)
downloadguix-forge-7519f07374cb7b617aa5efc30619e954fd260499.tar.gz
guix-forge-7519f07374cb7b617aa5efc30619e954fd260499.tar.lz
guix-forge-7519f07374cb7b617aa5efc30619e954fd260499.zip
forge: Serve project websites.
* guix/forge/forge.scm: Import (forge nginx) and (gnu services web).
(<forge-project>)[web-domain]: New field.
(forge-nginx-server-blocks): New function.
* guix/forge/forge.scm: Extend forge-nginx-service-type.
* doc/forge.skb (Reference)[forge-project]: Document web-domain.
Diffstat (limited to 'guix')
-rw-r--r--guix/forge/forge.scm21
1 files changed, 21 insertions, 0 deletions
diff --git a/guix/forge/forge.scm b/guix/forge/forge.scm
index 866b132..abd8a26 100644
--- a/guix/forge/forge.scm
+++ b/guix/forge/forge.scm
@@ -29,6 +29,7 @@
   #:use-module ((gnu packages version-control) #:select (git-minimal))
   #:use-module (gnu services)
   #:use-module (gnu services mcron)
+  #:use-module (gnu services web)
   #:use-module (guix channels)
   #:use-module (guix deprecation)
   #:use-module (guix gexp)
@@ -39,6 +40,7 @@
   #:use-module (guix store)
   #:use-module ((forge guile-git) #:select (guile-git))
   #:use-module (forge laminar)
+  #:use-module (forge nginx)
   #:use-module (forge tissue)
   #:use-module (forge utils)
   #:use-module (forge webhook)
@@ -53,6 +55,7 @@
             forge-project-user
             forge-project-repository
             forge-project-repository-branch
+            forge-project-web-domain
             forge-project-website-directory
             forge-project-ci-jobs
             forge-project-ci-jobs-trigger
@@ -78,6 +81,8 @@
                      (default "main"))
   (description forge-project-description
                (default #f))
+  (web-domain forge-project-web-domain
+              (default #f))
   (website-directory forge-project-website-directory
                      (default #f))
   (ci-jobs forge-project-ci-jobs
@@ -438,6 +443,20 @@ that were built."
                                           (package-channels pkg))))))))
                 inferior))))))))
 
+(define (forge-nginx-server-blocks config)
+  "Return list of @code{<nginx-server-configuration>} extensions for
+forge configuration @var{config}."
+  ;; Configure nginx server blocks for projects that have a web domain
+  ;; and a website directory.
+  (filter-map (match-record-lambda <forge-project>
+                  (web-domain website-directory tissue?)
+                (and web-domain
+                     website-directory
+                     (nginx-server-configuration
+                      (server-name (list web-domain))
+                      (root website-directory))))
+              (forge-configuration-projects config)))
+
 (define (forge-ci-jobs config)
   "Return list of CI jobs for forge configuration @var{config}. Each
 value of the returned list is a @code{<forge-laminar-job>} object."
@@ -527,6 +546,8 @@ value is a list of @code{<webhook-hook>} objects."
    (description "Run guix-forge.")
    (extensions (list (service-extension activation-service-type
                                         forge-activation)
+                     (service-extension forge-nginx-service-type
+                                        forge-nginx-server-blocks)
                      (service-extension forge-laminar-service-type
                                         forge-ci-jobs+contexts+groups)
                      ;; TODO: Run CI job only if there are new commits