diff --git a/README.md b/README.md index cc584fd9..873569dc 100644 --- a/README.md +++ b/README.md @@ -630,7 +630,7 @@ less ### Portable tree command -See [examples/tree.clj](https://github.com/borkdude/babashka/blob/8afb87142e0e4da8b6f912cfd7daf9c30b805ab3/examples/tree.clj). +See [examples/tree.clj](https://github.com/borkdude/babashka/blob/master/examples/tree.clj). ``` shellsession $ clojure -Sdeps '{:deps {org.clojure/tools.cli {:mvn/version "0.4.2"}}}' examples/tree.clj src @@ -650,6 +650,20 @@ src ... ``` +### List outdated maven dependencies + +See [examples/outdated.clj](https://github.com/borkdude/babashka/blob/master/examples/outdated.clj). + +``` shellsession +$ cat /tmp/deps.edn +{:deps {cheshire {:mvn/version "5.8.1"} + clj-http {:mvn/version "3.4.0"}}} + +$ examples/outdated.clj /tmp/deps.edn +clj-http/clj-http can be upgraded from 3.4.0 to 3.10.0 +cheshire/cheshire can be upgraded from 5.8.1 to 5.9.0 +``` + ## Thanks - [adgoji](https://www.adgoji.com/) for financial support diff --git a/examples/outdated.clj b/examples/outdated.clj new file mode 100755 index 00000000..1dfa7eef --- /dev/null +++ b/examples/outdated.clj @@ -0,0 +1,34 @@ +#!/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