mirror of
https://github.com/penpot/penpot.git
synced 2025-02-01 20:09:04 -05:00
✨ Add improved REPL support
This commit is contained in:
parent
de3605356c
commit
99f39c9777
9 changed files with 231 additions and 1033 deletions
|
@ -4,6 +4,8 @@
|
||||||
:deps
|
:deps
|
||||||
{penpot/common {:local/root "../common"}
|
{penpot/common {:local/root "../common"}
|
||||||
org.clojure/clojure {:mvn/version "1.12.0-alpha5"}
|
org.clojure/clojure {:mvn/version "1.12.0-alpha5"}
|
||||||
|
org.clojure/tools.namespace {:mvn/version "1.4.4"}
|
||||||
|
|
||||||
com.github.luben/zstd-jni {:mvn/version "1.5.5-10"}
|
com.github.luben/zstd-jni {:mvn/version "1.5.5-10"}
|
||||||
|
|
||||||
io.prometheus/simpleclient {:mvn/version "0.16.0"}
|
io.prometheus/simpleclient {:mvn/version "0.16.0"}
|
||||||
|
@ -26,6 +28,8 @@
|
||||||
|
|
||||||
com.github.seancorfield/next.jdbc {:mvn/version "1.3.894"}
|
com.github.seancorfield/next.jdbc {:mvn/version "1.3.894"}
|
||||||
metosin/reitit-core {:mvn/version "0.6.0"}
|
metosin/reitit-core {:mvn/version "0.6.0"}
|
||||||
|
nrepl/nrepl {:mvn/version "1.1.0"}
|
||||||
|
cider/cider-nrepl {:mvn/version "0.43.1"}
|
||||||
|
|
||||||
org.postgresql/postgresql {:mvn/version "42.6.0"}
|
org.postgresql/postgresql {:mvn/version "42.6.0"}
|
||||||
|
|
||||||
|
@ -61,7 +65,6 @@
|
||||||
{:dev
|
{:dev
|
||||||
{:extra-deps
|
{:extra-deps
|
||||||
{com.bhauman/rebel-readline {:mvn/version "RELEASE"}
|
{com.bhauman/rebel-readline {:mvn/version "RELEASE"}
|
||||||
org.clojure/tools.namespace {:mvn/version "RELEASE"}
|
|
||||||
clojure-humanize/clojure-humanize {:mvn/version "0.2.2"}
|
clojure-humanize/clojure-humanize {:mvn/version "0.2.2"}
|
||||||
org.clojure/data.csv {:mvn/version "RELEASE"}
|
org.clojure/data.csv {:mvn/version "RELEASE"}
|
||||||
com.clojure-goes-fast/clj-async-profiler {:mvn/version "RELEASE"}
|
com.clojure-goes-fast/clj-async-profiler {:mvn/version "RELEASE"}
|
||||||
|
|
|
@ -1,18 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "uxbox-back",
|
"name": "penpot-backend",
|
||||||
"version": "0.1.0",
|
"version": "1.0.0",
|
||||||
"description": "The Open-Source prototyping tool",
|
"main": "index.js",
|
||||||
"scripts": {
|
"license": "MPL-2.0",
|
||||||
"test": "echo \"Error: no test specified\" && exit 1",
|
"dependencies": {
|
||||||
"build-emails": "./scripts/build-email-templates.sh"
|
"luxon": "^3.4.2",
|
||||||
|
"sax": "^1.2.4"
|
||||||
},
|
},
|
||||||
"repository": {
|
"scripts": {},
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/uxbox/uxbox.git"
|
|
||||||
},
|
|
||||||
"author": "Uxbox",
|
|
||||||
"license": "SEE LICENSE IN <LICENSE>",
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"mjml": "^4.6.3"
|
"nodemon": "^3.0.1",
|
||||||
|
"source-map-support": "^0.5.21",
|
||||||
|
"ws": "^8.13.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
3
backend/scripts/nrepl
Executable file
3
backend/scripts/nrepl
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
clojure -J-Xms50m -J-Xmx256m -J-XX:+UseSerialGC -Sdeps '{:deps {reply/reply {:mvn/version "0.5.0"}}}' -M -m reply.main --attach localhost:6064 -e "(in-ns 'app.main)"
|
|
@ -6,6 +6,7 @@ export PENPOT_FLAGS="\
|
||||||
$PENPOT_FLAGS \
|
$PENPOT_FLAGS \
|
||||||
enable-prepl-server \
|
enable-prepl-server \
|
||||||
enable-urepl-server \
|
enable-urepl-server \
|
||||||
|
enable-nrepl-server \
|
||||||
enable-webhooks \
|
enable-webhooks \
|
||||||
enable-backend-asserts \
|
enable-backend-asserts \
|
||||||
enable-audit-log \
|
enable-audit-log \
|
||||||
|
@ -18,22 +19,35 @@ export PENPOT_FLAGS="\
|
||||||
enable-access-tokens \
|
enable-access-tokens \
|
||||||
disable-file-validation";
|
disable-file-validation";
|
||||||
|
|
||||||
set -ex
|
# Initialize MINIO config
|
||||||
|
mc alias set penpot-s3/ http://minio:9000 minioadmin minioadmin
|
||||||
|
mc admin user add penpot-s3 penpot-devenv penpot-devenv
|
||||||
|
mc admin policy attach penpot-s3 readwrite --user=penpot-devenv
|
||||||
|
mc mb penpot-s3/penpot -p
|
||||||
|
|
||||||
|
export AWS_ACCESS_KEY_ID=penpot-devenv
|
||||||
|
export AWS_SECRET_ACCESS_KEY=penpot-devenv
|
||||||
|
export PENPOT_ASSETS_STORAGE_BACKEND=assets-s3
|
||||||
|
export PENPOT_STORAGE_ASSETS_S3_ENDPOINT=http://minio:9000
|
||||||
|
export PENPOT_STORAGE_ASSETS_S3_BUCKET=penpot
|
||||||
|
|
||||||
if [ "$1" = "--watch" ]; then
|
if [ "$1" = "--watch" ]; then
|
||||||
|
trap "exit" INT TERM ERR
|
||||||
|
trap "kill 0" EXIT
|
||||||
|
|
||||||
echo "Start Watch..."
|
echo "Start Watch..."
|
||||||
|
|
||||||
clojure -A:dev -M -m app.main &
|
clojure -A:dev -M -m app.main &
|
||||||
PID=$!
|
|
||||||
|
|
||||||
npx nodemon \
|
npx nodemon \
|
||||||
--watch src \
|
--watch src \
|
||||||
--watch ../common \
|
--watch ../common \
|
||||||
--ext "clj" \
|
--ext "clj" \
|
||||||
--signal SIGKILL \
|
--signal SIGKILL \
|
||||||
--exec 'echo "(user/restart)" | nc -N localhost 6062'
|
--exec 'echo "(app.main/stop)\n\r(repl/refresh)\n\r(app.main/start)\n" | nc -N localhost 6062'
|
||||||
|
|
||||||
|
wait;
|
||||||
|
|
||||||
kill -9 $PID
|
|
||||||
else
|
else
|
||||||
clojure -A:dev -M -m app.main
|
clojure -A:dev -M -m app.main;
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -37,8 +37,12 @@
|
||||||
[app.storage.s3 :as-alias sto.s3]
|
[app.storage.s3 :as-alias sto.s3]
|
||||||
[app.util.time :as dt]
|
[app.util.time :as dt]
|
||||||
[app.worker :as-alias wrk]
|
[app.worker :as-alias wrk]
|
||||||
|
[cider.nrepl :refer [cider-nrepl-handler]]
|
||||||
|
[clojure.test :as test]
|
||||||
|
[clojure.tools.namespace.repl :as repl]
|
||||||
[cuerdas.core :as str]
|
[cuerdas.core :as str]
|
||||||
[integrant.core :as ig]
|
[integrant.core :as ig]
|
||||||
|
[nrepl.server :as nrepl]
|
||||||
[promesa.exec :as px])
|
[promesa.exec :as px])
|
||||||
(:gen-class))
|
(:gen-class))
|
||||||
|
|
||||||
|
@ -527,7 +531,7 @@
|
||||||
(merge worker-config))
|
(merge worker-config))
|
||||||
(ig/prep)
|
(ig/prep)
|
||||||
(ig/init))))
|
(ig/init))))
|
||||||
(l/info :hint "welcome to penpot"
|
(l/inf :hint "welcome to penpot"
|
||||||
:flags (str/join "," (map name cf/flags))
|
:flags (str/join "," (map name cf/flags))
|
||||||
:worker? (contains? cf/flags :backend-worker)
|
:worker? (contains? cf/flags :backend-worker)
|
||||||
:version (:full cf/version)))
|
:version (:full cf/version)))
|
||||||
|
@ -537,12 +541,55 @@
|
||||||
(alter-var-root #'system (fn [sys]
|
(alter-var-root #'system (fn [sys]
|
||||||
(when sys (ig/halt! sys))
|
(when sys (ig/halt! sys))
|
||||||
nil)))
|
nil)))
|
||||||
|
(defn restart
|
||||||
|
[]
|
||||||
|
(stop)
|
||||||
|
(repl/refresh :after 'app.main/start))
|
||||||
|
|
||||||
|
(defn restart-all
|
||||||
|
[]
|
||||||
|
(stop)
|
||||||
|
(repl/refresh-all :after 'app.main/start))
|
||||||
|
|
||||||
|
(defmacro run-bench
|
||||||
|
[& exprs]
|
||||||
|
`(do
|
||||||
|
(require 'criterium.core)
|
||||||
|
(criterium.core/with-progress-reporting (crit/quick-bench (do ~@exprs) :verbose))))
|
||||||
|
|
||||||
|
(defn run-tests
|
||||||
|
([] (run-tests #"^backend-tests.*-test$"))
|
||||||
|
([o]
|
||||||
|
(repl/refresh)
|
||||||
|
(cond
|
||||||
|
(instance? java.util.regex.Pattern o)
|
||||||
|
(test/run-all-tests o)
|
||||||
|
|
||||||
|
(symbol? o)
|
||||||
|
(if-let [sns (namespace o)]
|
||||||
|
(do (require (symbol sns))
|
||||||
|
(test/test-vars [(resolve o)]))
|
||||||
|
(test/test-ns o)))))
|
||||||
|
|
||||||
|
(repl/disable-reload! (find-ns 'integrant.core))
|
||||||
|
|
||||||
(defn -main
|
(defn -main
|
||||||
[& _args]
|
[& _args]
|
||||||
(try
|
(try
|
||||||
|
(let [p (promise)]
|
||||||
|
(when (contains? cf/flags :nrepl-server)
|
||||||
|
(l/inf :hint "start nrepl server" :port 6064)
|
||||||
|
(nrepl/start-server :bind "0.0.0.0" :port 6064 :handler cider-nrepl-handler))
|
||||||
|
|
||||||
(start)
|
(start)
|
||||||
|
(deref p))
|
||||||
(catch Throwable cause
|
(catch Throwable cause
|
||||||
(l/error :hint (ex-message cause)
|
(binding [*out* *err*]
|
||||||
:cause cause)
|
(println "==== ERROR ===="))
|
||||||
|
(.printStackTrace cause)
|
||||||
|
(when-let [cause' (ex-cause cause)]
|
||||||
|
(binding [*out* *err*]
|
||||||
|
(println "==== CAUSE ===="))
|
||||||
|
(.printStackTrace cause'))
|
||||||
|
(px/sleep 500)
|
||||||
(System/exit -1))))
|
(System/exit -1))))
|
||||||
|
|
|
@ -36,7 +36,9 @@
|
||||||
lock (locks/create)]
|
lock (locks/create)]
|
||||||
(ccs/prepl *in*
|
(ccs/prepl *in*
|
||||||
(fn [m]
|
(fn [m]
|
||||||
(binding [*out* out, *flush-on-newline* true, *print-readably* true]
|
(binding [*out* out,
|
||||||
|
*flush-on-newline* true,
|
||||||
|
*print-readably* true]
|
||||||
(locks/locking lock
|
(locks/locking lock
|
||||||
(println (json/encode-str m))))))))
|
(println (json/encode-str m))))))))
|
||||||
|
|
||||||
|
@ -44,13 +46,10 @@
|
||||||
|
|
||||||
(s/def ::port ::us/integer)
|
(s/def ::port ::us/integer)
|
||||||
(s/def ::host ::us/not-empty-string)
|
(s/def ::host ::us/not-empty-string)
|
||||||
(s/def ::flag #{:urepl-server :prepl-server})
|
|
||||||
(s/def ::type #{::prepl ::urepl})
|
|
||||||
(s/def ::key (s/tuple ::type ::us/keyword))
|
|
||||||
|
|
||||||
(defmethod ig/pre-init-spec ::server
|
(defmethod ig/pre-init-spec ::server
|
||||||
[_]
|
[_]
|
||||||
(s/keys :req [::flag ::host ::port]))
|
(s/keys :req [::host ::port]))
|
||||||
|
|
||||||
(defmethod ig/prep-key ::server
|
(defmethod ig/prep-key ::server
|
||||||
[[type _] cfg]
|
[[type _] cfg]
|
||||||
|
@ -59,6 +58,12 @@
|
||||||
(defmethod ig/init-key ::server
|
(defmethod ig/init-key ::server
|
||||||
[[type _] {:keys [::flag ::port ::host] :as cfg}]
|
[[type _] {:keys [::flag ::port ::host] :as cfg}]
|
||||||
(when (contains? cf/flags flag)
|
(when (contains? cf/flags flag)
|
||||||
|
|
||||||
|
(l/inf :hint "initializing repl server"
|
||||||
|
:name (name type)
|
||||||
|
:port port
|
||||||
|
:host host)
|
||||||
|
|
||||||
(let [accept (case type
|
(let [accept (case type
|
||||||
::prepl 'app.srepl/json-repl
|
::prepl 'app.srepl/json-repl
|
||||||
::urepl 'app.srepl/user-repl)
|
::urepl 'app.srepl/user-repl)
|
||||||
|
@ -67,14 +72,8 @@
|
||||||
:name (name type)
|
:name (name type)
|
||||||
:accept accept}]
|
:accept accept}]
|
||||||
|
|
||||||
(l/info :msg "initializing repl server"
|
|
||||||
:name (name type)
|
|
||||||
:port port
|
|
||||||
:host host)
|
|
||||||
|
|
||||||
(ccs/start-server params)
|
(ccs/start-server params)
|
||||||
|
(assoc params :type type))))
|
||||||
params)))
|
|
||||||
|
|
||||||
(defmethod ig/halt-key! ::server
|
(defmethod ig/halt-key! ::server
|
||||||
[_ params]
|
[_ params]
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
[app.util.time :as dt]
|
[app.util.time :as dt]
|
||||||
[app.worker :as wrk]
|
[app.worker :as wrk]
|
||||||
[clojure.pprint :refer [pprint print-table]]
|
[clojure.pprint :refer [pprint print-table]]
|
||||||
|
[clojure.tools.namespace.repl :as repl]
|
||||||
[cuerdas.core :as str]))
|
[cuerdas.core :as str]))
|
||||||
|
|
||||||
(defn print-available-tasks
|
(defn print-available-tasks
|
||||||
|
|
1120
backend/yarn.lock
1120
backend/yarn.lock
File diff suppressed because it is too large
Load diff
|
@ -37,6 +37,9 @@ services:
|
||||||
- 3449:3449
|
- 3449:3449
|
||||||
- 6060:6060
|
- 6060:6060
|
||||||
- 6061:6061
|
- 6061:6061
|
||||||
|
- 6062:6062
|
||||||
|
- 6063:6063
|
||||||
|
- 6064:6064
|
||||||
- 9090:9090
|
- 9090:9090
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
Loading…
Add table
Reference in a new issue