tools-deps

Discuss tools.deps.alpha, tools.build, and the clj/clojure command-line scripts! See also #depstar #clj-new
flowthing 2021-02-25T08:03:20.092500Z

Is there a way to run -P for all aliases in a deps.edn file? My use case is that we have CI build that runs steps in parallel, so we'd like to download every dep that every alias needs into the local Maven cache before running the CI steps to prevent concurrent access to ~/.m2. We could list all aliases manually, but if there's a new alias, then we need to remember to add it into the -P step.

borkdude 2021-02-25T08:10:26.092900Z

Write a script :)

flowthing 2021-02-25T08:18:20.093500Z

Yeah, that's one option. Was wondering whether we could leverage the tools.deps API and -X to do something like that. Will look into it.

borkdude 2021-02-25T09:16:28.093900Z

@flowthing Getting all aliases from a deps.edn is quite easy. This is a bb script:

(require '[clojure.edn :as edn]
         '[clojure.string :as str])

(def edn (edn/read-string (slurp "deps.edn")))

(def aliases (keys (:aliases edn)))

(require '[babashka.deps :as deps])

(def cmd ["-P" (str "-A" (str/join aliases))])

(println "Downloading deps using:" cmd)

(deps/clojure cmd)

flowthing 2021-02-25T09:17:04.094100Z

That looks simple enough, thanks!

flowthing 2021-02-25T09:41:17.094900Z

Golfing a bit here, but I guess this'd also do it:

{:aliases {:foo {:extra-deps {criterium/criterium {:mvn/version "0.4.6"}}}
           :bar {:extra-deps {org.clojure/test.check {:mvn/version "1.1.0"}}}
           :baz {:extra-deps {cheshire/cheshire {:mvn/version "5.10.0"}}}}}
(require
    '[<http://clojure.java.io|clojure.java.io> :as io]
    '[clojure.tools.deps.alpha :as deps]
    '[clojure.tools.deps.alpha.util.maven :as mvn])
  
  (as-&gt;
    (assoc (deps/slurp-deps (io/file "deps.edn")) :mvn/repos mvn/standard-repos)
    deps
    (deps/resolve-deps deps (deps/combine-aliases deps (-&gt;&gt; deps :aliases keys))))