summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ravanan/reader.scm167
1 files changed, 87 insertions, 80 deletions
diff --git a/ravanan/reader.scm b/ravanan/reader.scm
index badc7a7..c287dfc 100644
--- a/ravanan/reader.scm
+++ b/ravanan/reader.scm
@@ -1,5 +1,5 @@
 ;;; ravanan --- High-reproducibility CWL runner powered by Guix
-;;; Copyright © 2024 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2024, 2025 Arun Isaac <arunisaac@systemreboot.net>
 ;;;
 ;;; This file is part of ravanan.
 ;;;
@@ -114,90 +114,97 @@ each association list of the returned vector of association lists. If
                             requirement))
                       (coerce-alist->vector requirements "class")))))
 
-(define (normalize-workflow cwl)
-  "Normalize CWL workflow @var{cwl} (of any class)."
-  (define (normalize-secondary-files secondary-files default-required)
-    (cond
-     ;; array of SecondaryFileSchema objects
-     ((vector? secondary-files)
-      (vector-append-map (cut normalize-secondary-files <> default-required)
-                         secondary-files))
-     ;; SecondaryFileSchema object
-     ((not (string? secondary-files))
-      (vector secondary-files))
-     ;; string form optional SecondaryFileSchema object
-     ((string-suffix? "?" secondary-files)
-      (vector `(("pattern" . ,(string-drop-right secondary-files
-                                                 (string-length "?")))
-                ("required" . #f))))
-     ;; string form SecondaryFileSchema object with an unspecified required
-     (else
-      (vector `(("pattern" . ,secondary-files)
-                ("required" . ,default-required))))))
+(define (normalize-secondary-files secondary-files default-required)
+  "Normalize @var{secondary-files}. @var{default-required} is the default value of
+the @code{required} field when it is not specified."
+  (cond
+   ;; array of SecondaryFileSchema objects
+   ((vector? secondary-files)
+    (vector-append-map (cut normalize-secondary-files <> default-required)
+                       secondary-files))
+   ;; SecondaryFileSchema object
+   ((not (string? secondary-files))
+    (vector secondary-files))
+   ;; string form optional SecondaryFileSchema object
+   ((string-suffix? "?" secondary-files)
+    (vector `(("pattern" . ,(string-drop-right secondary-files
+                                               (string-length "?")))
+              ("required" . #f))))
+   ;; string form SecondaryFileSchema object with an unspecified required
+   (else
+    (vector `(("pattern" . ,secondary-files)
+              ("required" . ,default-required))))))
 
-  (define (normalize-formal-input input)
-    (if (eq? (formal-parameter-type (assoc-ref input "type"))
-             'File)
-        (maybe-assoc-set input
-          (cons (list "default" "location")
-                (maybe-let* ((location (maybe-assoc-ref (just input)
-                                                        "default" "location")))
-                  (just (canonicalize-path location))))
-          (cons "secondaryFiles"
-                (maybe-bind (maybe-assoc-ref (just input) "secondaryFiles")
-                            (compose just
-                                     (cut normalize-secondary-files <> #t)))))
-        input))
+(define (normalize-formal-input input)
+  "Normalize formal @var{input}."
+  (if (eq? (formal-parameter-type (assoc-ref input "type"))
+           'File)
+      (maybe-assoc-set input
+        (cons (list "default" "location")
+              (maybe-let* ((location (maybe-assoc-ref (just input)
+                                                      "default" "location")))
+                (just (canonicalize-path location))))
+        (cons "secondaryFiles"
+              (maybe-bind (maybe-assoc-ref (just input) "secondaryFiles")
+                          (compose just
+                                   (cut normalize-secondary-files <> #t)))))
+      input))
 
-  (define (normalize-formal-output output)
-    (if (eq? (formal-parameter-type (assoc-ref output "type"))
-             'File)
-        (maybe-assoc-set output
-          (cons "secondaryFiles"
-                (maybe-bind (maybe-assoc-ref (just output) "secondaryFiles")
-                            (compose just
-                                     (cut normalize-secondary-files <> #f)))))
-        output))
+(define (normalize-formal-output output)
+  "Normalize formal @var{output}."
+  (if (eq? (formal-parameter-type (assoc-ref output "type"))
+           'File)
+      (maybe-assoc-set output
+        (cons "secondaryFiles"
+              (maybe-bind (maybe-assoc-ref (just output) "secondaryFiles")
+                          (compose just
+                                   (cut normalize-secondary-files <> #f)))))
+      output))
 
-  (define (normalize-base-command maybe-base-command)
-    (maybe-let* ((base-command maybe-base-command))
-      (cond
-       ((string? base-command) (just (vector base-command)))
-       ((vector? base-command) (just base-command)))))
+(define (normalize-base-command maybe-base-command)
+  "Normalize @var{base-command} of @code{CommandLineTool} class workflow."
+  (maybe-let* ((base-command maybe-base-command))
+    (cond
+     ((string? base-command) (just (vector base-command)))
+     ((vector? base-command) (just base-command)))))
+
+(define (normalize-arguments maybe-arguments)
+  "Normalize @var{maybe-arguments} of @code{CommandLineTool} class workflow."
+  (maybe-let* ((arguments maybe-arguments))
+    (just (vector-map (lambda (argument)
+                        (cond
+                         ((string? argument)
+                          `(("valueFrom" . ,argument)))
+                         ((list? argument)
+                          argument)
+                         (else
+                          (error "Invalid argument" argument))))
+                      arguments))))
 
-  (define (normalize-arguments maybe-arguments)
-    (maybe-let* ((arguments maybe-arguments))
-      (just (vector-map (lambda (argument)
-                          (cond
-                           ((string? argument)
-                            `(("valueFrom" . ,argument)))
-                           ((list? argument)
-                            argument)
-                           (else
-                            (error "Invalid argument" argument))))
-                        arguments))))
+(define (normalize-steps maybe-steps)
+  "Normalize @var{maybe-steps} of @code{Workflow} class workflow."
+  (maybe-let* ((steps maybe-steps))
+    (just (vector-map (lambda (step)
+                        (maybe-assoc-set step
+                          ;; Read steps recursively.
+                          (cons "run"
+                                (let ((run (assoc-ref step "run")))
+                                  (just (if (string? run)
+                                            (read-workflow run)
+                                            (normalize-workflow run)))))
+                          ;; Normalize step requirements and hints.
+                          (cons "requirements"
+                                (normalize-requirements
+                                 (maybe-assoc-ref (just step)
+                                                  "requirements")))
+                          (cons "hints"
+                                (normalize-requirements
+                                 (maybe-assoc-ref (just step)
+                                                  "hints")))))
+                      (coerce-alist->vector steps "id")))))
 
-  (define (normalize-steps maybe-steps)
-    (maybe-let* ((steps maybe-steps))
-      (just (vector-map (lambda (step)
-                          (maybe-assoc-set step
-                            ;; Read steps recursively.
-                            (cons "run"
-                                  (let ((run (assoc-ref step "run")))
-                                    (just (if (string? run)
-                                              (read-workflow run)
-                                              (normalize-workflow run)))))
-                            ;; Normalize step requirements and hints.
-                            (cons "requirements"
-                                  (normalize-requirements
-                                   (maybe-assoc-ref (just step)
-                                                    "requirements")))
-                            (cons "hints"
-                                  (normalize-requirements
-                                   (maybe-assoc-ref (just step)
-                                                    "hints")))))
-                        (coerce-alist->vector steps "id")))))
-  
+(define (normalize-workflow cwl)
+  "Normalize CWL workflow @var{cwl} (of any class)."
   (apply maybe-assoc-set
          cwl
          ;; Normalize requirements and hints to a vector.