[#663] :min-bb-version
This commit is contained in:
parent
3c6cf3f37e
commit
3e9ddc55bb
2 changed files with 41 additions and 11 deletions
|
|
@ -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)
|
||||
"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))))
|
||||
(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)))
|
||||
|
||||
|
|
|
|||
|
|
@ -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"])))))
|
||||
(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`
|
||||
|
|
|
|||
Loading…
Reference in a new issue