-
Notifications
You must be signed in to change notification settings - Fork 0
/
common.clj
117 lines (102 loc) · 4.33 KB
/
common.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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
(ns ^{:author "Jeremy Schoffen"
:doc "
Utilites common to different maven related tasks.
"}
fr.jeremyschoffen.mbt.alpha.core.maven.common
(:require
[fr.jeremyschoffen.java.nio.alpha.file :as fs]
[fr.jeremyschoffen.mbt.alpha.core.gpg :as gpg]
[fr.jeremyschoffen.mbt.alpha.utils :as u])
(:import
[org.eclipse.aether.artifact DefaultArtifact]))
(u/pseudo-nss
project
maven
maven.deploy
maven.deploy.artefact
gpg.sign!)
;;----------------------------------------------------------------------------------------------------------------------
;; Maven Constants
;;----------------------------------------------------------------------------------------------------------------------
(def home (u/safer-path (System/getProperty "user.home")))
(def default-maven-home (u/safer-path home ".m2"))
(def default-local-repo (u/safer-path default-maven-home "repository"))
(def maven-default-settings-file (u/safer-path default-maven-home "settings.xml"))
;;----------------------------------------------------------------------------------------------------------------------
;; Deploy utils
;;----------------------------------------------------------------------------------------------------------------------
(defn- make-maven-artefact
"Construct an instance of `org.eclipse.aether.artifact.DefaultArtifact`."
[{artefact-name ::maven/artefact-name
group-id ::maven/group-id
classifier ::maven/classifier
version ::project/version
deploy-artefact ::maven.deploy/artefact}]
(let [{::maven.deploy.artefact/keys [path extension]} deploy-artefact]
(.setFile (DefaultArtifact. (str group-id)
(str artefact-name)
(str classifier)
extension
(str version))
(fs/file path))))
(u/spec-op make-maven-artefact
:param {:req [::maven/artefact-name
::maven/group-id
::project/version
::maven.deploy/artefact]
:opt [::maven/classifier]})
(defn make-maven-artefacts
"Construct several `org.eclipse.aether.artifact.DefaultArtifact`."
[{deploy-artefacts ::maven.deploy/artefacts
:as param}]
(mapv (fn [a]
(-> param
(assoc ::maven.deploy/artefact a)
make-maven-artefact))
deploy-artefacts))
(u/spec-op make-maven-artefacts
:param {:req [::maven/artefact-name
::maven/group-id
::project/version
::maven.deploy/artefacts]
:opt [::maven/classifier]})
(defn sign-artefact!
"Sign one maven deployment artefact under the key `:maven.deploy/artefact` using gpg, return a map specifying the
resulting signature as instance `:maven.deploy/artefact` spec."
[{artefact ::maven.deploy/artefact
:as param}]
(let [{p ::maven.deploy.artefact/path
ext ::maven.deploy.artefact/extension} artefact
{out ::gpg.sign!/out} (-> param
(assoc ::gpg/sign! {::gpg.sign!/in p})
gpg/sign-file!)]
{::maven.deploy.artefact/path out
::maven.deploy.artefact/extension (str ext ".asc")}))
(u/spec-op sign-artefact!
:deps [gpg/sign-file!]
:param {:req [::maven.deploy/artefact]
:opt [::gpg/command
::gpg/home-dir
::gpg/key-id
::gpg/pass-phrase
::gpg/version
::project/working-dir]}
:ret ::maven.deploy/artefact)
(defn sign-artefacts!
"Sign several maven deployment artefacts using gpg.
See [[fr.jeremyschoffen.mbt.alpha.core.maven.common/sign-artefact!]]"
[{artefacts ::maven.deploy/artefacts
:as param}]
(mapv (fn [a]
(sign-artefact! (assoc param ::maven.deploy/artefact a)))
artefacts))
(u/spec-op sign-artefacts!
:deps [sign-artefact!]
:param {:req [::maven.deploy/artefacts]
:opt [::gpg/command
::gpg/home-dir
::gpg/key-id
::gpg/pass-phrase
::gpg/version
::project/working-dir]}
:ret ::maven.deploy/artefacts)