diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-08-25 21:31:37 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-08-26 00:51:56 +0200 |
commit | 949672c923b6a3953471c446e0b19f30be335572 (patch) | |
tree | 3a5a000fe94f80744ddc6c43a7422d12e731258a /gnu/services/mcron.scm | |
parent | 4788e5542025ba82e03e02d49a04416292d1fccb (diff) | |
download | guix-949672c923b6a3953471c446e0b19f30be335572.tar guix-949672c923b6a3953471c446e0b19f30be335572.tar.gz |
services: mcron: Validate jobs at build time.
That way, run-time errors in the job specs are caught at build time.
* gnu/services/mcron.scm (job-file): Remove.
(job-files): New procedure.
(mcron-shepherd-services): Adjust accordingly.
Diffstat (limited to 'gnu/services/mcron.scm')
-rw-r--r-- | gnu/services/mcron.scm | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/gnu/services/mcron.scm b/gnu/services/mcron.scm index d9627c6bd0..045d6e2fe8 100644 --- a/gnu/services/mcron.scm +++ b/gnu/services/mcron.scm @@ -57,8 +57,26 @@ (jobs mcron-configuration-jobs ;list of <mcron-job> (default '()))) -(define (job-file job) - (scheme-file "mcron-job" job)) +(define (job-files mcron jobs) + "Return a list of file-like object for JOBS, a list of gexps." + (define (validated-file job) + ;; This procedure behaves like 'scheme-file' but it runs 'mcron + ;; --schedule' to detect any error in JOB. + (computed-file "mcron-job" + (with-imported-modules '((guix build utils)) + #~(begin + (use-modules (guix build utils)) + + (call-with-output-file "job" + (lambda (port) + (write '#$job port))) + + (invoke #+(file-append mcron "/bin/mcron") + "--schedule=20" "job") + (copy-file "job" #$output))) + #:options '(#:env-vars (("COLUMNS" . "150"))))) + + (map validated-file jobs)) (define (shepherd-schedule-action mcron files) "Return a Shepherd action that runs MCRON with '--schedule' for the given @@ -101,7 +119,7 @@ files." (($ <mcron-configuration> mcron ()) ;nothing to do! '()) (($ <mcron-configuration> mcron jobs) - (let ((files (map job-file jobs))) + (let ((files (job-files mcron jobs))) (list (shepherd-service (provision '(mcron)) (requirement '(user-processes)) |