[#663] :min-bb-version

This commit is contained in:
Michiel Borkent 2021-04-24 12:54:41 +02:00
parent 3c6cf3f37e
commit 3e9ddc55bb
2 changed files with 41 additions and 11 deletions

View file

@ -77,6 +77,12 @@
;; with the java provided by GraalVM.
(def version (str/trim (slurp (io/resource "BABASHKA_VERSION"))))
(defn parse-version [version]
(mapv #(Integer/parseInt %)
(-> version
(str/replace "-SNAPSHOT" "")
(str/split #"\."))))
(def version-data (parse-version version))
(defn print-version []
(println (str "babashka v" version)))
@ -776,12 +782,29 @@ When no eval opts or subcommand is provided, the implicit subcommand is repl.")
(throw (Exception. "The uberjar task needs a classpath."))))
exit-code))))
(defn satisfies-min-version? [min-version]
(let [[major-current minor-current patch-current] version-data
[major-min minor-min patch-min] (parse-version min-version)]
(or (> major-current major-min)
(and (= major-current major-min)
(or (> minor-current minor-min)
(and (= minor-current minor-min)
(>= patch-current patch-min)))))))
(defn main [& args]
(let [bb-edn-file (or (System/getenv "BABASHKA_EDN")
"bb.edn")]
(when (fs/exists? bb-edn-file)
(let [edn (edn/read-string (slurp bb-edn-file))]
(vreset! common/bb-edn edn))))
"bb.edn")
bb-edn (or (when (fs/exists? bb-edn-file)
(let [edn (edn/read-string (slurp bb-edn-file))]
(vreset! common/bb-edn edn)))
;; tests may have modified bb-edn
@common/bb-edn)
min-bb-version (:min-bb-version bb-edn)]
(when min-bb-version
(when-not (satisfies-min-version? min-bb-version)
(binding [*out* *err*]
(println (str "WARNING: this project requires babashka "
min-bb-version " or newer, but you have: " version))))))
(let [opts (parse-opts args)]
(exec opts)))

View file

@ -113,16 +113,23 @@
(when-not test-utils/native?
(testing "FILE > TASK > SUBCOMMAND"
(is (= "foo.jar" (:uberjar (main/parse-opts ["uberjar" "foo.jar"]))))
(test-utils/with-config '{:tasks {uberjar (+ 1 2 3)}}
(vreset! common/bb-edn (edn/read-string (slurp test-utils/*bb-edn-path*)))
(is (= "uberjar" (:run (main/parse-opts ["uberjar"])))))
(vreset! common/bb-edn '{:tasks {uberjar (+ 1 2 3)}})
(is (= "uberjar" (:run (main/parse-opts ["uberjar"]))))
(try
(test-utils/with-config '{:tasks {uberjar (+ 1 2 3)}}
(spit "uberjar" "#!/usr/bin/env bb\n(+ 1 2 3)")
(vreset! common/bb-edn (edn/read-string (slurp test-utils/*bb-edn-path*)))
(is (= "uberjar" (:file (main/parse-opts ["uberjar"])))))
(spit "uberjar" "#!/usr/bin/env bb\n(+ 1 2 3)")
(vreset! common/bb-edn '{:tasks {uberjar (+ 1 2 3)}})
(is (= "uberjar" (:file (main/parse-opts ["uberjar"]))))
(finally (fs/delete "uberjar"))))))
(deftest min-bb-version
(when-not test-utils/native?
(vreset! common/bb-edn '{:min-bb-version "300.0.0"})
(let [sw (java.io.StringWriter.)]
(binding [*err* sw]
(main/main "-e" "nil"))
(is (str/includes? (str sw)
"WARNING: this project requires babashka 300.0.0 or newer, but you have: ")))))
;; TODO:
;; Do we want to support the same parsing as the clj CLI?
;; Or do we want `--aliases :foo:bar`