34 lines
1.1 KiB
Clojure
Executable file
34 lines
1.1 KiB
Clojure
Executable file
#!/usr/bin/env bb
|
|
|
|
(require '[clojure.edn :as edn])
|
|
(require '[clojure.java.shell :refer [sh]])
|
|
(require '[clojure.string :as str])
|
|
|
|
(def deps (-> (slurp (or (first *command-line-args*)
|
|
"deps.edn"))
|
|
edn/read-string
|
|
:deps))
|
|
(def with-release (zipmap (keys deps)
|
|
(map #(assoc % :mvn/version "RELEASE")
|
|
(vals deps))))
|
|
|
|
(defn deps->versions [deps]
|
|
(let [res (sh "clojure" "-Sdeps" (str {:deps deps}) "-Stree")
|
|
tree (:out res)
|
|
lines (str/split tree #"\n")
|
|
top-level (remove #(str/starts-with? % " ") lines)
|
|
deps (map #(str/split % #" ") top-level)]
|
|
(reduce (fn [acc [dep version]]
|
|
(assoc acc dep version))
|
|
{}
|
|
deps)))
|
|
|
|
(def version-map (deps->versions deps))
|
|
(def new-version-map (deps->versions with-release))
|
|
|
|
(doseq [[dep version] version-map
|
|
:let [new-version (get new-version-map dep)]
|
|
:when (not= version new-version)]
|
|
(println dep "can be upgraded from" version "to" new-version))
|
|
|
|
;; Inspired by an idea from @seancorfield on Clojurians Slack
|