aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Isaac2025-03-28 01:34:03 +0000
committerArun Isaac2025-03-28 03:26:47 +0000
commit7519f07374cb7b617aa5efc30619e954fd260499 (patch)
tree60bf663f033f325d16bc55e9f804497f003f31fc
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.
-rw-r--r--doc/forge.skb4
-rw-r--r--guix/forge/forge.scm21
2 files changed, 24 insertions, 1 deletions
diff --git a/doc/forge.skb b/doc/forge.skb
index 4f861dd..4134e70 100644
--- a/doc/forge.skb
+++ b/doc/forge.skb
@@ -1,5 +1,5 @@
;;; guix-forge --- Guix software forge meta-service
-;;; Copyright © 2022–2024 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2022–2025 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2024 Frederick M. Muriithi <fredmanglis@protonmail.com>
;;;
;;; This file is part of guix-forge.
@@ -533,6 +533,8 @@ disregarded if the repository is remote.])
the ,(file "description") file in the repository and will appear in
the cgit web interface. This field is disregarded if the repository is
remote.])
+ (record-field "web-domain"
+ [Domain name to serve project website on])
(record-field "website-directory"
[Path to the document root of the project website. The
ownership of its parent directory is granted to the ,(code "laminar")
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