summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-xbin/ravanan26
-rw-r--r--ravanan/command-line-tool.scm40
-rw-r--r--ravanan/workflow.scm10
3 files changed, 40 insertions, 36 deletions
diff --git a/bin/ravanan b/bin/ravanan
index 19bb8b5..cc9005d 100755
--- a/bin/ravanan
+++ b/bin/ravanan
@@ -97,27 +97,6 @@ files that have the token in the @verbatim{SLURM_JWT=token} format."
              string-trim-both
              get-string-all)))
 
-(define (load-manifest manifest-file)
-  "Load manifest from @var{manifest-file} and return it."
-  ;; We load the manifest file into a dummy module of its own so that any
-  ;; definitions from there don't leak out. We also ensure that this dummy
-  ;; module is different for different manifest files so that definitions from
-  ;; one manifest file don't leak into other manifest files.
-  (let ((manifest-file-path (canonicalize-file-name manifest-file))
-        (manifest-module (resolve-module (match (file-name-split manifest-file-path)
-                                           (("" parts ...)
-                                            (map string->symbol parts))))))
-    ;; Import modules required for loading manifests.
-    (for-each (lambda (module-name)
-                (module-use! manifest-module (resolve-interface module-name)))
-              '((guile)
-                (gnu packages)
-                (guix profiles)))
-    (save-module-excursion
-     (lambda ()
-       (set-current-module manifest-module)
-       (load manifest-file-path)))))
-
 (define main
   (match-lambda
     ((program args ...)
@@ -151,9 +130,8 @@ files that have the token in the @verbatim{SLURM_JWT=token} format."
           ;; We must not try to compile guix manifest files.
           (set! %load-should-auto-compile #f)
           (scm->json (run-workflow (file-name-stem workflow-file)
-                                   (load-manifest
-                                    (canonicalize-path
-                                     (assq-ref args 'guix-manifest-file)))
+                                   (canonicalize-path
+                                    (assq-ref args 'guix-manifest-file))
                                    (read-workflow workflow-file)
                                    (read-inputs inputs-file)
                                    (case (assq-ref args 'batch-system)
diff --git a/ravanan/command-line-tool.scm b/ravanan/command-line-tool.scm
index 54a92cf..19f3703 100644
--- a/ravanan/command-line-tool.scm
+++ b/ravanan/command-line-tool.scm
@@ -367,19 +367,19 @@ path."
                                      (string-append (basename script) ".stderr"))
                     store))
 
-(define* (run-command-line-tool name manifest cwl inputs
+(define* (run-command-line-tool name manifest-file cwl inputs
                                 scratch store batch-system
                                 #:key guix-daemon-socket
                                 slurm-api-endpoint slurm-jwt)
   "Run @code{CommandLineTool} class workflow @var{cwl} named @var{name} with
-@var{inputs} using tools from Guix @var{manifest}.
+@var{inputs} using tools from Guix manifest in @var{manifest-file}.
 
 @var{scratch}, @var{store}, @var{batch-system}, @var{guix-daemon-socket},
 @var{slurm-api-endpoint} and @var{slurm-jwt} are the same as in
 @code{run-workflow} from @code{(ravanan workflow)}."
   ;; TODO: Write to the store atomically.
   (let* ((script
-          (build-command-line-tool-script name manifest cwl inputs
+          (build-command-line-tool-script name manifest-file cwl inputs
                                           scratch store batch-system
                                           guix-daemon-socket))
          (requirements (inherit-requirements (or (assoc-ref cwl "requirements")
@@ -547,12 +547,37 @@ maybe-monadic value."
                                  class))
                      requirements))
 
-(define (build-command-line-tool-script name manifest cwl inputs
+(define (load-manifest manifest-file)
+  "Load Guix manifest from @var{manifest-file} and return it."
+  ;; We load the manifest file into a dummy module of its own so that any
+  ;; definitions from there don't leak into this module. We also ensure that
+  ;; this dummy module is different for different manifest files so that
+  ;; definitions from one manifest file don't leak into other manifest files.
+  (let ((manifest-module
+         (resolve-module (match (file-name-split (canonicalize-file-name manifest-file))
+                           (("" parts ...)
+                            (map string->symbol parts))))))
+    ;; Import modules required for loading manifests.
+    (for-each (lambda (module-name)
+                (module-use! manifest-module (resolve-interface module-name)))
+              '((guile)
+                (gnu packages)
+                (guix profiles)))
+    (save-module-excursion
+     (lambda ()
+       (set-current-module manifest-module)
+       ;; Our use of load triggers a "Add #:declarative? #f to your
+       ;; define-module invocation" warning during compilation. But, it is
+       ;; probably safe to ignore this warning since we use load only within a
+       ;; dummy module.
+       (load (canonicalize-path manifest-file))))))
+
+(define (build-command-line-tool-script name manifest-file cwl inputs
                                         scratch store batch-system
                                         guix-daemon-socket)
   "Build and return script to run @code{CommandLineTool} class workflow @var{cwl}
-named @var{name} with @var{inputs} using tools from Guix manifest
-@var{manifest} and on @var{batch-system}.
+named @var{name} with @var{inputs} using tools from Guix manifest in
+@var{manifest-file} and on @var{batch-system}.
 
 @var{scratch}, @var{store} and @var{guix-daemon-socket} are the same as in
 @code{run-workflow} from @code{(ravanan workflow)}."
@@ -706,7 +731,8 @@ named @var{name} with @var{inputs} using tools from Guix manifest
                                                (or (assoc-ref cwl "hints")
                                                    #())))
            (initial-work-dir-requirement (find-requirement requirements
-                                                           "InitialWorkDirRequirement")))
+                                                           "InitialWorkDirRequirement"))
+           (manifest (load-manifest manifest-file)))
       (with-imported-modules (source-module-closure '((ravanan work command-line-tool)
                                                       (ravanan work monads)
                                                       (ravanan work ui)
diff --git a/ravanan/workflow.scm b/ravanan/workflow.scm
index 42fa349..95dfb73 100644
--- a/ravanan/workflow.scm
+++ b/ravanan/workflow.scm
@@ -245,7 +245,7 @@ propagator."
            merge-values
            scheduler))
 
-(define* (workflow-scheduler manifest scratch store batch-system
+(define* (workflow-scheduler manifest-file scratch store batch-system
                              #:key guix-daemon-socket
                              slurm-api-endpoint slurm-jwt)
   (define (schedule proc inputs scheduler)
@@ -290,7 +290,7 @@ job state object. @var{proc} may either be a @code{<propnet>} object or a
              ((string=? class "CommandLineTool")
               (command-line-tool-state
                (run-command-line-tool name
-                                      manifest
+                                      manifest-file
                                       cwl
                                       inputs
                                       scratch
@@ -570,12 +570,12 @@ error out."
                                          formal-inputs))
                     formal-inputs))
 
-(define* (run-workflow name manifest cwl inputs
+(define* (run-workflow name manifest-file cwl inputs
                        scratch store batch-system
                        #:key guix-daemon-socket
                        slurm-api-endpoint slurm-jwt)
   "Run a workflow @var{cwl} named @var{name} with @var{inputs} using
-tools from Guix @var{manifest}.
+tools from Guix manifest in @var{manifest-file}.
 
 @var{scratch} is the path to the scratch area on all worker nodes. The
 scratch area need not be shared. @var{store} is the path to the shared
@@ -591,7 +591,7 @@ authenticate to the slurm API with. @var{slurm-api-endpoint} and
 @var{slurm-jwt} are only used when @var{batch-system} is
 @code{'slurm-api}."
   (let ((scheduler (workflow-scheduler
-                    manifest scratch store batch-system
+                    manifest-file scratch store batch-system
                     #:guix-daemon-socket guix-daemon-socket
                     #:slurm-api-endpoint slurm-api-endpoint
                     #:slurm-jwt slurm-jwt)))