:description "Port on which to listen for commands. Defaults to 25004")
(:positional "<command>" :required t :description "Command to send to candle server")))
-(defun project-options()
+(defun project-options ()
'((:name :help :short "h" :long "help" :description "Print this usage.")
(:name :add :long "add" :takes-argument t :description
"Add a project. <name> is the name of the project, which must not include colons, while <src> is the location of the repository for cloning. This location must be accessible by the machine running candle."
:variable-name "<name>:<src>")))
-(defun job-options()
+(defun job-options ()
'((:name :help :short "h" :long "help" :description "Print this usage.")
- (:name :project-name :short "p" :long "project" :takes-argument t :description "The project name for the jobs under consideration.")
+ (:name :project-name :long "project" :takes-argument t :description "The project name for the jobs under consideration.")
(:name :add :long "add" :takes-argument t :description
"Add a job to a project. <sha> is the commit for that project to run the job. Requires --project to be specified."
:variable-name "<sha>")))
+(defun run-options ()
+ '((:name :help :short "h" :long "help" :description "Print this usage.")))
+
(defun main-usage ()
(format t "~A"
(opera:usage
(t
(let*
((name (subseq project-definition 0 pos))
- (src (subseq project-definition (1+ pos)))
- (response (communication:query `(candle:add-project ,name ,src))))
+ (src (subseq project-definition (1+ pos))))
(format t "Added project ~A at src definition ~A~%" name src))))))
(defmethod execute-command ((command (eql :project)) args)
((opera:option-present :add options) (add-project (opera:option-argument :add options))))))
(defun add-job (project-name sha)
- (let
- ((response (communication:query `(candle:add-job ,project-name ,sha))))
- (format t "Added job with sha ~A to project ~A~%" sha project-name)))
+ (format t "Added job with sha ~A to project ~A~%" sha project-name))
(defmethod execute-command ((command (eql :job)) args)
(multiple-value-bind (options remaining-args error) (opera:process-arguments (job-options) args)
(opera:option-argument :project-name options)
(opera:option-argument :add options))))))
+(defmethod execute-command ((command (eql :run)) args)
+ (multiple-value-bind (options remaining-args error) (opera:process-arguments (run-options) args)
+ (cond
+ ((eql error :unknown-option) (format *error-output* "Unknown option: ~A. See 'candle run --help'.~%" (car remaining-args)))
+ ((eql error :required-argument-missing) (format *error-output* "Missing argument for ~A. See 'candle run --help'.~%" (car remaining-args)))
+ (remaining-args (format *error-output* "Unknown option: ~A. See 'candle run --help'.~%" (car remaining-args)))
+ ((opera:option-present :help options) (format t "~A" (opera:usage "candle run" (run-options))))
+ (t (candle:run)))))
+
(defun run ()
(multiple-value-bind (options remaining-args error) (opera:process-arguments (main-options) (cdr sb-ext:*posix-argv*))
(cond
(parse-integer (opera:option-argument :port options) :junk-allowed t))
25004)))
(execute-command (intern (string-upcase (car remaining-args)) :keyword) (cdr remaining-args)))))))
-
-; vim:ft=lisp
--- /dev/null
+(in-package #:candle)
+
+(defun import-package (pkg)
+ (asdf:load-system pkg))
+
+(defun run-task (task)
+ (format t "~%~c[1;33mRunning ~:(~A~)~c[0m~%" #\Esc (getf task :name) #\Esc)
+ (eval (getf task :directions))
+; (format t "~c[1;31mFailed doc check!~c[0m~%" #\Esc #\Esc)
+ (format t "~c[1;32m- ~:(~A~) Passed!~c[0m~%" #\Esc (getf task :name) #\Esc))
+
+(defun run ()
+ (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)))
+ (let
+ ((candle-definition (read str)))
+ (format t "Running tasks for ~(~A~)~%" (getf candle-definition :name))
+ (mapcar #'run-task (getf candle-definition :tasks))))))