summaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2025-10-15 12:26:14 +0200
committerLudovic Courtès <ludo@gnu.org>2025-10-16 15:14:36 +0200
commit03640d3cf04e9540b59cc1806e50b07095ea393f (patch)
tree42446af88c96b232fec6e2e42f620abce33f49d8 /gnu/services
parent37f794ae22d42447c27e524d01d3ddafa24b8d8e (diff)
services: cuirass: Validate specifications at build time.
This ensures problems in the spec are caught before the system is instantiated. * gnu/services/cuirass.scm (cuirass-configuration->specification-file): New procedure. (cuirass-shepherd-service): Use it instead of ‘scheme-file’. Change-Id: I90187ed4ed1a51958159741a55b6dc635c97312a
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/cuirass.scm26
1 files changed, 23 insertions, 3 deletions
diff --git a/gnu/services/cuirass.scm b/gnu/services/cuirass.scm
index 27ff87ca56d..0cc504562a4 100644
--- a/gnu/services/cuirass.scm
+++ b/gnu/services/cuirass.scm
@@ -134,6 +134,28 @@
(web-extra-options cuirass-configuration-web-extra-options
(default '())))
+(define (cuirass-configuration->specification-file config)
+ "Return a specification file built from CONFIG and validate it."
+ (define cuirass
+ (cuirass-configuration-cuirass config))
+
+ (define build
+ #~(begin
+ (use-modules (ice-9 pretty-print))
+
+ (call-with-output-file #$output
+ (lambda (port)
+ (pretty-print '#$(cuirass-configuration-specifications config)
+ port)))
+
+ ;; Validate the spec file upfront.
+ (unless (zero?
+ (system* #$(file-append cuirass "/bin/cuirass") "register"
+ "--check" "-S" #$output))
+ (exit 1))))
+
+ (computed-file "cuirass-specs.scm" build))
+
(define (cuirass-shepherd-service config)
"Return a <shepherd-service> for the Cuirass service with CONFIG."
(define (endpoint name)
@@ -162,9 +184,7 @@
(database (cuirass-configuration-database config))
(port (cuirass-configuration-port config))
(host (cuirass-configuration-host config))
- (config-file (scheme-file
- "cuirass-specs.scm"
- (cuirass-configuration-specifications config)))
+ (config-file (cuirass-configuration->specification-file config))
(one-shot? (cuirass-configuration-one-shot? config))
(fallback? (cuirass-configuration-fallback? config))
(extra-options (cuirass-configuration-extra-options config))