Here's my general problem statement (this applies to a monorepo as well):
- a development team works together on multiple projects that each have their
deps.edn
file, and
- those developers have their own preferred tooling configured in their own
~/.clojure/deps.edn
file, and
- the team as a whole wants a level of consistency in terms of certain library or tooling versions across multiple projects, by providing some standardized aliases and some "pinned" versions (e.g.,
:override-deps
or :default-deps
).
Bullets 1. and 2. are supported by the CLI/t.d.a. but there's nowhere to hang the multi-project standardization piece.
Currently, folks who want 3. are using CLJ_CONFIG
to provide a team-standard deps.edn
file but losing 1. in the process. This is considered a bit of a hack (although CLJ_CONFIG
is documented).
Michiel Borkent notes that his clj-kondo
tool faced a similar problem in terms of where it reads configuration data from and his solution was to provide a command-line argument that specified multiple configuration files to read. A similar approach could be taken with the Clojure CLI, allowing an arbitrary number of deps.edn
files to be combined (after the system + user level ones and before the command-line -Sdeps
data).
The current "system + user + project + command-line" logic is baked into tools.deps.alpha
itself so this is not just a CLI script change -- and whatever approach is taken to address this needs to be available to tooling that needs to run analysis based on a combined deps.edn
environment under user-specific aliases (as discussed here https://ask.clojure.org/index.php/9848/tooling-based-tools-alpha-construct-basis-specified-aliases).