diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..942a5e6 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +all: build-server + +build-server: + sbcl --eval '(ql:quickload "deploy")' --eval '(asdf:load-asd "/home/chris/dev/tfcconnection/tfcserver.asd")' --eval '(ql:quickload :tfcserver)' --eval '(push :deploy-console *features*)' --eval "(asdf:make :tfcserver)" --eval '(quit)' + +serve: + hugo server --noHTTPCache + +css: + NODE_ENV=development ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w + +build-site: + rm -rf public && NODE_ENV=production ./themes/blowfish/node_modules/tailwindcss/lib/cli.js -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit && hugo --gc --minify + +clean: + rm -rf public diff --git a/default.nix b/default.nix index 5bb2c42..2f7a2f0 100644 --- a/default.nix +++ b/default.nix @@ -2,9 +2,25 @@ stdenv, lib, hugo, - go + go, + sbcl, + sbclPackages, + makeWrapper, + openssl }: +let + sbcl' = sbcl.withPackages (ps: with ps; [ + hunchentoot + dexador + clack + jzon + serapeum + openssl + openssl.out + openssl.dev + ]); +in stdenv.mkDerivation rec { name = "tfcconnection"; pname = "tfcconnection"; @@ -12,16 +28,22 @@ stdenv.mkDerivation rec { src = ./.; + nativeBuildInputs = [ + makeWrapper + ]; + buildInputs = [ hugo go + sbcl' ]; buildPhase = '' - hugo + make ''; installPhase = '' + ''; meta = with lib; { diff --git a/flake.nix b/flake.nix index 940bf07..7888105 100644 --- a/flake.nix +++ b/flake.nix @@ -15,6 +15,7 @@ in { devShell = import ./shell.nix { inherit pkgs; }; + defaultPackage = pkgs.callPackage ./default.nix { }; } ); } diff --git a/src/server/main.lisp b/src/main.lisp similarity index 86% rename from src/server/main.lisp rename to src/main.lisp index a27a5fc..2c1d000 100644 --- a/src/server/main.lisp +++ b/src/main.lisp @@ -1,14 +1,6 @@ -(require :asdf) -(require :hunchentoot) -(require :dexador) -(require :serapeum) -(require :clack) -(require :com.inuoe.jzon) -;; (load "~/quicklisp/setup.lisp") -;; (ql:quickload :cffi :silent t) -;; (ql:quickload '(hunchentoot clack dexador com.inuoe.jzon serapeum)) +(ql:quickload '(hunchentoot clack dexador com.inuoe.jzon serapeum bordeaux-threads)) -(uiop:define-package tfc-server +(defpackage tfc-server (:use :cl :uiop :com.inuoe.jzon :clack)) (in-package :tfc-server) @@ -19,7 +11,10 @@ (defvar *stream*) (defvar *auth-token* "boFFRM68vvXbO-DO7S9YDg86lHX027-hd07mn0dh") -(defvar *server* (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))) +(defvar *server*) + +(defun start-server (port) + (setq *server* (hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port port)))) (defun post-health-form (data-list) "Takes the health form as an alist and posts it to nocodb" @@ -55,9 +50,9 @@ (defun process-form (form) "Processes the form and sends it on" - (uiop:println "---") - (maphash 'print-hash-entry form) - (uiop:println "---")) + (uiop:println "---") + (maphash 'print-hash-entry form) + (uiop:println "---")) (defun save-string-file (string file-path) "save a file that is represented as a string to disk that came from a multipart/form-data" @@ -86,7 +81,7 @@ (setq *last-list-data* nil) (loop :for i :in *last-data* :do (let* ((content-disposition (nth 1 - (serapeum:lines i :eol-style :crlf :honor-crlf t))) + (serapeum:lines i :eol-style :crlf :honor-crlf t))) (start (if content-disposition (position #\" content-disposition))) (end (if start (position #\" content-disposition :start (1+ start)) nil)) (name (if end (if start (subseq content-disposition (1+ start) end) nil) nil)) @@ -136,3 +131,19 @@ (post-health-form *last-list-data*) (format nil "thankyou")))))) +(defun main () + (start-server 4242) + (format t "Server has started on port 4242~&") + (handler-case (bt:join-thread (find-if (lambda (th) + (search "hunchentoot" (bt:thread-name th))) + (bt:all-threads))) + (#+sbcl sb-sys:interactive-interrupt + #+ccl ccl:interrupt-signal-condition + #+clisp system::simple-interrupt-condition + #+ecl ext:interactive-interrupt + #+allegro excl:interrupt-signal + () (progn + (format *error-output* "Aborting.~&") + (hunchentoot:stop *server*) + (uiop:quit))) + (error (c) (format t "Woops, an unknown error occured:~&~a~&" c)))) diff --git a/src/server/ChristianChad.png b/src/server/ChristianChad.png deleted file mode 100644 index 798fc58..0000000 Binary files a/src/server/ChristianChad.png and /dev/null differ diff --git a/tfcserver.asd b/tfcserver.asd new file mode 100644 index 0000000..0e57792 --- /dev/null +++ b/tfcserver.asd @@ -0,0 +1,18 @@ +#-asdf3.1 (error "requires asdf 3.1") + +(defsystem "tfcserver" + :version "0.1.0" + :author "Chris Cochrun" + :license "AGPLV3" + :depends-on ("hunchentoot" "dexador" "serapeum" "clack" "com.inuoe.jzon" "bordeaux-threads") ;; <== list of Quicklisp dependencies + :components ((:module "src" + :components + ((:file "main")))) + :description "Restful server to handle website pieces" + :long-description "Restful server to handle website pieces" + ;; :in-order-to ((test-op (test-op "tfcserver-test"))) + :defsystem-depends-on (:deploy) ;; (ql:quickload "deploy") before + :build-operation "deploy-op" ;; leave as is + :build-pathname "tfcapi" + :entry-point "tfc-server::main" + )