commit 798831fe31c3d1f81287de3e47c1671b0fe436ee Author: ajet Date: Wed Sep 10 09:19:53 2025 -0900 init commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..cc80222 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.cpcache +.clj-kondo +.lsp diff --git a/README.md b/README.md new file mode 100644 index 0000000..6112e09 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +## Deploy Me + +A simple http server that pulls git changes and restarts your service + diff --git a/bb.edn b/bb.edn new file mode 100644 index 0000000..e93a2ce --- /dev/null +++ b/bb.edn @@ -0,0 +1,3 @@ +{:paths ["src"] + :deps {}} + diff --git a/src/run.clj b/src/run.clj new file mode 100755 index 0000000..5d98c97 --- /dev/null +++ b/src/run.clj @@ -0,0 +1,67 @@ +#!/usr/bin/env bb +(ns run + (:require [org.httpkit.server :as s] + [cheshire.core :as json] + [clojure.java.io :as io] + [clojure.java.shell :as shell])) + +(def default-port 47331) + +(defn deploy-me [{:keys [project]}] + (and + (= 0 (:exit (shell/sh "/usr/bin/git" "pull" :dir (str "/root/repos/" project)))) + (= 0 (:exit (shell/sh "/usr/bin/systemctl" "restart" project))))) + +(defn app [req] + (try + (condp = (:request-method req) + :post (let [body (-> req + :body + io/reader + slurp + (json/parse-string true))] + + {:status 200 + :headers {"Content-Type" "application/edn"} + :body {:success (str (deploy-me body))}}) + :get {:status 200 :body "OK"} + {:status 405 + :headers {"Content-Type" "text/plain"} + :body "Method Not Allowed"}) + (catch Exception ex + (.printStackTrace ex) + {:status 500 + :body (str "uncaught exception:\n" (.getMessage ex))}))) + +(defonce server (atom nil)) + +(defn make-server [_opts] + (let [server (s/run-server #'app {:port default-port :legacy-return-value? false})] + (println (str "listening on port " default-port "...")) + server)) + +(defn stop-server [] + (when-not (nil? @server) + (s/server-stop! @server) + (reset! server nil))) + +(defn -main [& _args] + (reset! server (make-server {})) + (loop [] + (Thread/sleep 1000) + (let [status (s/server-status @server)] + (if (= status :running) + (do + (recur)) + (println "server stopped... exiting"))))) + +(comment + (reset! server (make-server {})) + + @server + + (s/server-status @server) + + (s/server-stop! @server) + ; + ) diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..8b8ad8e --- /dev/null +++ b/start.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env sh +cd ~/repos/deploy-me +bb -m run