-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathbuild.clj
99 lines (82 loc) · 3.44 KB
/
build.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
(ns build
(:require
[babashka.fs :as fs]
[clojure.tools.build.api :as b]
[k16.kaven.deploy :as kaven.deploy]
[k16.kmono.build :as kmono.build]
[k16.kmono.core.config :as core.config]
[k16.kmono.core.fs :as core.fs]
[k16.kmono.core.graph :as core.graph]
[k16.kmono.core.packages :as core.packages]
[k16.kmono.git.tags :as git.tags]))
(defn- get-latest-version [dir]
(->> (git.tags/get-sorted-tags dir)
(map (fn [tag]
(second (re-matches #"v(.*)" tag))))
(remove nil?)
first))
(defn- load-packages []
(let [project-root (core.fs/find-project-root!)
workspace-config (core.config/resolve-workspace-config project-root)
packages (->> (core.packages/resolve-packages project-root workspace-config)
(core.graph/filter-by #(not (get-in % [:deps-edn :kmono/private]))))
version (get-latest-version project-root)]
(reduce
(fn [packages [pkg-name pkg]]
(assoc packages pkg-name (assoc pkg :version version)))
{}
packages)))
(defn build [_]
(b/delete {:path "target"})
(let [packages (load-packages)]
(kmono.build/for-each-package packages
(fn [pkg]
(let [pkg-name (:fqn pkg)
relative-path (:relative-path pkg)
basis (kmono.build/create-basis packages pkg)
class-dir (kmono.build/join (fs/cwd) "target/" relative-path "classes")
jar-file (kmono.build/join (fs/cwd) "target/" relative-path "lib.jar")]
(b/copy-dir {:src-dirs (:paths basis)
:target-dir class-dir})
(b/write-pom {:class-dir class-dir
:lib pkg-name
:version (:version pkg)
:basis basis
:src-dirs (:paths basis)
:pom-data [[:description (get-in pkg [:deps-edn :kmono/description])]
[:url "https://github.com/kepler16/kmono"]
[:licenses
[:license
[:name "MIT"]
[:url "https://opensource.org/license/mit"]]]]})
(b/jar {:class-dir class-dir
:jar-file jar-file}))))))
(def ^:private clojars-credentials
{:username (System/getenv "CLOJARS_USERNAME")
:password (System/getenv "CLOJARS_PASSWORD")})
(defn release [_]
(let [packages (core.graph/filter-by kmono.build/not-published? (load-packages))]
(kmono.build/for-each-package packages
(fn [{:keys [relative-path]}]
(kaven.deploy/deploy
{:jar-path (kmono.build/join (fs/cwd) "target/" relative-path "lib.jar")
:repository {:id "clojars"
:credentials clojars-credentials}})))))
(defn build-cli [_]
(b/delete {:path "target"})
(b/with-project-root "packages/kmono-cli"
(let [basis (b/create-basis {:aliases [:native]})
class-dir (kmono.build/join (fs/cwd) "target/kmono-cli/classes")
uber-dir (kmono.build/join (fs/cwd) "target/kmono-cli/cli.jar")]
(b/copy-dir {:src-dirs (:paths basis)
:target-dir class-dir})
(b/compile-clj
{:basis basis
:compile-opts {:direct-linking true}
:ns-compile ['k16.kmono.cli.main]
:class-dir class-dir})
(b/uber
{:class-dir class-dir
:uber-file uber-dir
:basis basis
:main 'k16.kmono.cli.main}))))