Version 1 of local running
authorFrank Duncan <frank@kank.net>
Fri, 13 Aug 2021 16:49:28 +0000 (11:49 -0500)
committerFrank Duncan <frank@kank.net>
Fri, 13 Aug 2021 16:49:28 +0000 (11:49 -0500)
README.md [new file with mode: 0644]
bin/candle
candle.asd
src/main/cli.lisp
src/main/package.lisp
src/main/run.lisp [new file with mode: 0644]

diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..0a43cf8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+= Candle =
+
+Continuous Integration for SBCL based Lisp projects, using AWS instances
+as the machines on which the CI's are run.
+
+= .candle file =
+
+Each project with a candle file has a .candle file in the root of the project
+with tasks to be run.
+
+= Usage =
+
+Run bin/candle
index 2fc54e1a41cf2640442a936474b88abdb52323e3..ee6849844e9d1c8fb18b210034286781567c3358 100755 (executable)
@@ -6,3 +6,5 @@
  `(:source-registry (:tree ,(car (directory "."))) :INHERIT-CONFIGURATION))
 (asdf:load-system :candle)
 (candle-cli:run)
+
+; vim:ft=lisp
index 0eaba1cd4b2f0f8f58c7a5266256ecce1bccc3e8..0dbb24c8319cb9347512a175fefcb9f707035c84 100644 (file)
@@ -5,5 +5,5 @@
  :author "Frank Duncan (frank@consxy.com)"
  :serial t
  :pathname "src/main"
- :components ((:file "package") (:file "base") (:file "server") (:file "cli"))
+ :components ((:file "package") (:file "base") (:file "server") (:file "cli") (:file "run"))
  :depends-on (:herbie-utility :opera))
index 0dd036ad5ffe7afa9c8f458cf821baba55d9efd7..bbbf23cdffe28945754d57739af5d6257dad80ad 100644 (file)
@@ -6,19 +6,22 @@
     :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
@@ -41,8 +44,7 @@
    (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)
@@ -54,9 +56,7 @@
    ((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
@@ -88,5 +97,3 @@
          (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
index d7d001b3077fd9a5b518318af8cf6795ffd99b06..2eca80682be402c6d9155f4e124fb8a2e1ea9893 100644 (file)
@@ -1,4 +1,4 @@
 (defpackage #:candle (:use :cl)
- (:export #:server #:add-project #:add-job))
+ (:export #:server #:add-project #:add-job #:run))
 
 (defpackage #:candle-cli (:use :cl) (:export :run))
diff --git a/src/main/run.lisp b/src/main/run.lisp
new file mode 100644 (file)
index 0000000..fa9edbe
--- /dev/null
@@ -0,0 +1,22 @@
+(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))))))