Add specifying task to candle run
authorFrank Duncan <frank@kank.net>
Sun, 26 Dec 2021 22:58:28 +0000 (16:58 -0600)
committerFrank Duncan <frank@kank.net>
Sun, 26 Dec 2021 22:58:28 +0000 (16:58 -0600)
src/main/cli.lisp
src/main/package.lisp
src/main/run.lisp

index 1fff398fd28aabb595e8c495be6e78e5ba71c58d..75ecd40b3af6b6c15eb5fe7527e1abd7d80b36f4 100644 (file)
 
 (defmethod execute-command ((command (eql :run)) args)
  (let
-  ((options '((:name :help :short "h" :long "help" :description "Print this usage."))))
-  (standard-cli "run" options args :default nil
-   (when (not (candle:run)) (sb-ext:exit :code 1)))))
+  ((options
+    '((:name :help :short "h" :long "help" :description "Print this usage.")
+      (:name :task :long "task" :variable-name "TASK" :takes-argument t :description "Run TASK"))))
+  (standard-cli "candle run" options args :default nil
+   (cond
+    ((opera:option-present :task parsed-options)
+     (let
+      ((tasks (candle:list-tasks))
+       (specified-task (intern (string-upcase (opera:option-argument :task parsed-options)) :keyword)))
+      (if
+       (not (find specified-task (candle:list-tasks)))
+       (error-and-exit "Task ~(~A~) does not exist in .candle file" specified-task)
+       (candle:run specified-task))))
+    (t (when (not (candle:run)) (sb-ext:exit :code 1)))))))
index 63654509575bc4a0e6cab3d6551add1616db80dd..fe0bc7084b7070fb02129d38cd0bfe5de6681966 100644 (file)
@@ -1,7 +1,7 @@
 (defpackage #:candle (:use :cl)
  (:export
   #:server #:add-project #:delete-project #:refresh-project #:list-projects
-  #:project-branch-information #:run #:*candle-dir* #:*job-system* #:*candle-dir* #:failures
+  #:project-branch-information #:run #:list-tasks #:*candle-dir* #:*job-system* #:*candle-dir* #:failures
   #:project-job-information #:get-job-log #:retry-job #:job-project #:project-dir #:process-job-in-system
   #:shutdown-system
 
index d9797350547fe8403e6f0679435fe6383f644487..659beed84c22df9145227c5798aa47c05202fa4a 100644 (file)
   (progn (format t "~c[1;32m- ~:(~A~) Passed!~c[0m~%" #\Esc (getf task :name) #\Esc) t)
   (format t "~c[1;31m- ~:(~A~) Failed!~c[0m~%" #\Esc (getf task :name) #\Esc)))
 
-(defun run ()
- "RUN => RESULT
+(defun list-tasks ()
+ "LIST-TASKS => TASKS
+
+  TASKS: TASK*
 
 ARGUMENTS AND VALUES:
 
+  TASK: a keyword, representing a task that can be run
+
+DESCRIPTION:
+
+  Get a list of tasks available in the current .candle file."
+ (if
+  (not (probe-file ".candle"))
+  :dot-candle-absent
+  (with-open-file (str ".candle")
+   (asdf:initialize-source-registry `(:source-registry (:tree ,(car (directory "."))) :INHERIT-CONFIGURATION))
+   (mapcar #'import-package (cdr (read str)))
+   (mapcar (lambda (task) (getf task :name)) (getf (read str) :tasks)))))
+
+(defun run (&optional specified-task)
+ "RUN &optional SPECIFIED-TASK => RESULT
+
+ARGUMENTS AND VALUES:
+
+  SPECIFIED-TASK: a keyword, the task to run
   RESULT: a boolean, whether the process was successful
 
 DESCRIPTION:
 
   Runs the script specified by the .candle file in the current directory.
-  When completed, the boolean will be returned if it was successful or not."
+  When completed, the boolean will be returned if it was successful or not.
+
+  If SPECIFIED-TASK exists, only that task is run."
  (if
   (not (probe-file ".candle"))
   :dot-candle-absent
@@ -30,4 +53,8 @@ DESCRIPTION:
    (let
     ((candle-definition (read str)))
     (format t "Running tasks for ~(~A~)~%" (getf candle-definition :name))
-    (every #'identity (mapcar #'run-task (getf candle-definition :tasks)))))))
+    (every #'identity
+     (mapcar #'run-task
+      (remove-if
+       (lambda (task) (and specified-task (not (eql (getf task :name) specified-task))))
+       (getf candle-definition :tasks))))))))