33 lines
1.0 KiB
Clojure
33 lines
1.0 KiB
Clojure
(ns dev-mcp
|
|
"Leiningen task: start nREPL + web server on random ports."
|
|
(:require [clojure.java.io :as io]
|
|
[nrepl.server :as nrepl])
|
|
(:import [java.net ServerSocket]))
|
|
|
|
(defn available-port []
|
|
"Pick a random available TCP port."
|
|
(with-open [s (ServerSocket. 0)]
|
|
(.getLocalPort s)))
|
|
|
|
(defn- mcp-repl-task [& _args]
|
|
"Start nREPL server and HTTP server on random ports.
|
|
|
|
Writes ports to nrepl-port and .http-port files.
|
|
Connect with: clj-nrepl-eval -p $(cat nrepl-port)"
|
|
(let [nrepl-port (available-port)
|
|
http-port (available-port)]
|
|
(spit "nrepl-port" (str nrepl-port))
|
|
(spit ".http-port" (str http-port))
|
|
(println (format "nREPL port: %d (nrepl-port)" nrepl-port))
|
|
(println (format "HTTP port: %d (.http-port)" http-port))
|
|
(nrepl/start-server :port nrepl-port)
|
|
(require 'user)
|
|
((resolve 'user/start-dev) http-port)
|
|
(println "Ready.")
|
|
@(promise)))
|
|
|
|
(defn -main
|
|
"Entry point for: lein trampoline run -m dev-mcp"
|
|
[& args]
|
|
(apply mcp-repl-task args))
|