Declarative pod support for uberscript (#1227)

This commit is contained in:
Michiel Borkent 2022-04-02 23:41:04 +02:00 committed by GitHub
parent 7af93adf15
commit e81ef4aac0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 45 additions and 18 deletions

View file

@ -52,11 +52,11 @@
[hf.depstar.uberjar :as uberjar] [hf.depstar.uberjar :as uberjar]
[sci.addons :as addons] [sci.addons :as addons]
[sci.core :as sci] [sci.core :as sci]
[sci.impl.io :as sio]
[sci.impl.namespaces :as sci-namespaces] [sci.impl.namespaces :as sci-namespaces]
[sci.impl.types :as sci-types] [sci.impl.types :as sci-types]
[sci.impl.unrestrict :refer [*unrestricted*]] [sci.impl.unrestrict :refer [*unrestricted*]]
[sci.impl.vars :as vars] [sci.impl.vars :as vars])
[sci.impl.io :as sio])
(:gen-class)) (:gen-class))
(def windows? (def windows?
@ -765,7 +765,16 @@ Use bb run --help to show this help output.
:expressions [(:source res)]}) :expressions [(:source res)]})
{}) {})
res)))) res))))
(when-let [pod (get @pod-namespaces namespace)] (if-let [pod (get @pod-namespaces namespace)]
(if uberscript
(do
(swap! uberscript-sources conj
(format
"(babashka.pods/load-pod '%s \"%s\" '%s)\n"
(:pod-spec pod) (:version (:opts pod))
(dissoc (:opts pod)
:version :metadata)))
{})
(pods/load-pod (:pod-spec pod) (:opts pod))) (pods/load-pod (:pod-spec pod) (:opts pod)))
(case namespace (case namespace
clojure.spec.alpha clojure.spec.alpha
@ -774,7 +783,7 @@ Use bb run --help to show this help output.
clojure.core.specs.alpha clojure.core.specs.alpha
(binding [*out* *err*] (binding [*out* *err*]
(println "[babashka] WARNING: clojure.core.specs.alpha is removed from the classpath, unless you explicitly add the dependency.")) (println "[babashka] WARNING: clojure.core.specs.alpha is removed from the classpath, unless you explicitly add the dependency."))
nil))) nil))))
main (if (and jar (not main)) main (if (and jar (not main))
(when-let [res (cp/getResource (when-let [res (cp/getResource
(cp/loader jar) (cp/loader jar)

View file

@ -0,0 +1,6 @@
(ns my.main-pod
(:require [my.other-ns-with-pod]
[pod.babashka.go-sqlite3 :as sqlite]))
(defn -main [& _args]
(sqlite/query ":memory:" ["SELECT 1 + 2 as sum"]))

View file

@ -0,0 +1,2 @@
(ns my.other-ns-with-pod
(:require [pod.babashka.go-sqlite3]))

View file

@ -1,7 +1,8 @@
(ns babashka.uberscript-test (ns babashka.uberscript-test
(:require (:require
[babashka.test-utils :as tu] [babashka.test-utils :as tu]
[clojure.test :as t :refer [deftest is]])) [clojure.test :as t :refer [deftest is]]
[clojure.string :as str]))
(deftest basic-test (deftest basic-test
(let [tmp-file (java.io.File/createTempFile "uberscript" ".clj")] (let [tmp-file (java.io.File/createTempFile "uberscript" ".clj")]
@ -23,3 +24,12 @@
(is (= ":clojure.string/foo\ntrue\n(\"1\" \"2\" \"3\" \"4\")\n" (is (= ":clojure.string/foo\ntrue\n(\"1\" \"2\" \"3\" \"4\")\n"
(tu/bb nil "--file" (.getPath tmp-file) "1" "2" "3" "4")))))) (tu/bb nil "--file" (.getPath tmp-file) "1" "2" "3" "4"))))))
(deftest pods-test
(let [tmp-file (java.io.File/createTempFile "uberscript" ".clj")]
(.deleteOnExit tmp-file)
(tu/with-config (pr-str '{:paths ["test-resources/babashka/uberscript/src"]
:pods {org.babashka/go-sqlite3 {:version "0.1.0"}}})
(is (empty? (tu/bb nil "uberscript" (.getPath tmp-file) "-m" "my.main-pod")))
(is (= 1 (count (re-seq #"load-pod 'org.babashka/go-sqlite3"
(str/join (str/split-lines (slurp tmp-file))))))))
(is (str/includes? (tu/bb nil "--file" (.getPath tmp-file)) "3"))))