Skip to content

Commit 3e259e3

Browse files
committed
Add simpler API for resolving kmono workspace
This introduces a new `k16.kmono.workspace/resolve-workspace-context!` which composes all the lower-level API calls required in order to fully resolve a kmono workspace.
1 parent 77998ad commit 3e259e3

File tree

4 files changed

+41
-19
lines changed

4 files changed

+41
-19
lines changed

build/build.clj

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
[clojure.tools.build.api :as b]
55
[k16.kaven.deploy :as kaven.deploy]
66
[k16.kmono.build :as kmono.build]
7-
[k16.kmono.core.config :as core.config]
8-
[k16.kmono.core.fs :as core.fs]
97
[k16.kmono.core.graph :as core.graph]
10-
[k16.kmono.core.packages :as core.packages]
11-
[k16.kmono.git.tags :as git.tags]))
8+
[k16.kmono.git.tags :as git.tags]
9+
[k16.kmono.workspace :as kmono.workspace]))
1210

1311
(defn- get-latest-version [dir]
1412
(some (fn [tag]
@@ -17,12 +15,9 @@
1715
(git.tags/get-sorted-tags dir)))
1816

1917
(defn- load-packages []
20-
(let [project-root (core.fs/find-project-root!)
21-
workspace-config (core.config/resolve-workspace-config project-root)
22-
packages (->> (core.packages/resolve-packages project-root workspace-config)
23-
(core.graph/filter-by #(not (get-in % [:deps-edn :kmono/private]))))
24-
25-
version (get-latest-version project-root)]
18+
(let [{:keys [root packages]} (kmono.workspace/resolve-workspace-context!)
19+
packages (core.graph/filter-by packages #(not (get-in % [:deps-edn :kmono/private])))
20+
version (get-latest-version root)]
2621

2722
(reduce
2823
(fn [packages [pkg-name pkg]]
Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,20 @@
33
[clojure.tools.build.api :as b]
44
[k16.kaven.deploy :as kaven.deploy]
55
[k16.kmono.build :as kmono.build]
6-
[k16.kmono.core.config :as core.config]
76
[k16.kmono.core.fs :as core.fs]
87
[k16.kmono.core.graph :as core.graph]
9-
[k16.kmono.core.packages :as core.packages]
108
[k16.kmono.git.tags :as git.tags]
119
[k16.kmono.version :as kmono.version]
12-
[k16.kmono.version.alg.conventional-commits :as conventional-commits]))
10+
[k16.kmono.version.alg.conventional-commits :as conventional-commits]
11+
[k16.kmono.workspace :as kmono.workspace]))
1312

1413
(defn load-packages [{:keys [skip-unchanged]}]
15-
(let [project-root (core.fs/find-project-root)
16-
workspace-config (core.config/resolve-workspace-config project-root)
14+
(let [{:keys [root packages]} (kmono.workspace/resolve-workspace-context!)
1715

1816
packages
19-
(cond->> (->> (core.packages/resolve-packages project-root workspace-config)
20-
(kmono.version/resolve-package-versions project-root)
21-
(kmono.version/resolve-package-changes project-root))
17+
(cond->> (->> packages
18+
(kmono.version/resolve-package-versions root)
19+
(kmono.version/resolve-package-changes root))
2220

2321
;; Only perform a build and/or release for packages which have changed
2422
;; since their last version; or packages whose dependencies have

examples/workspace/deps.edn

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
com.kepler16/kmono-build {:local/root "../../packages/kmono-build"}
88
com.kepler16/kmono-core {:local/root "../../packages/kmono-core"}}
99
:ns-default build
10-
:extra-paths ["build.clj"]}}}
10+
:extra-paths ["build"]}}}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
(ns k16.kmono.workspace
2+
(:require
3+
[k16.kmono.core.config :as core.config]
4+
[k16.kmono.core.fs :as core.fs]
5+
[k16.kmono.core.packages :as core.packages]))
6+
7+
(defn resolve-workspace-context!
8+
"A helper function for resolving the workspace context. This combines:
9+
10+
1. Finding the project root
11+
2. Resolving the kmono workspace config for the project
12+
3. Resolving the initial package graph
13+
14+
Returns a map containing:
15+
16+
- `:root` - The project root
17+
- `:config` - The workspace config
18+
- `:packages` - The packages graph
19+
20+
Will throw an exception if the project root cannot be resolved, if anything
21+
is incorrectly configured, or fails to resolve."
22+
([] (resolve-workspace-context! nil))
23+
([dir]
24+
(let [project-root (core.fs/find-project-root! dir)
25+
workspace-config (core.config/resolve-workspace-config project-root)
26+
packages (core.packages/resolve-packages project-root workspace-config)]
27+
{:root project-root
28+
:config workspace-config
29+
:packages packages})))

0 commit comments

Comments
 (0)