|
1 | | -(def deps|clj-1-8 |
| 1 | +(require |
| 2 | + 'leiningen.deploy |
| 3 | + 'leiningen.jar |
| 4 | + 'leiningen.pom) |
| 5 | + |
| 6 | +(def deps|clj-1-8-0 |
2 | 7 | '[[clojure-future-spec "1.9.0-beta4"] |
3 | 8 | [frankiesardo/linked "1.2.9"] |
4 | | - [org.clojure/clojure "1.8.0"]]) |
| 9 | + [org.clojure/clojure "1.8.0"] |
| 10 | + [org.clojure/test.check "0.9.0"]]) |
5 | 11 |
|
6 | | -(def deps|clj-1-9 |
| 12 | +(def deps|clj-1-9-0 |
7 | 13 | '[[clojure-future-spec "1.9.0-beta4"] |
8 | 14 | [frankiesardo/linked "1.2.9"] |
9 | 15 | [org.clojure/clojure "1.9.0"] |
10 | | - [org.clojure/spec.alpha "0.1.143"]]) |
| 16 | + [org.clojure/spec.alpha "0.1.143"] |
| 17 | + [org.clojure/test.check "0.9.0"]]) |
11 | 18 |
|
12 | | -(defproject quantum/defnt "0.2.0" |
13 | | - :description "Where `defn` meets `clojure.spec` and a gradual-typing baby is born." |
14 | | - :url "https://github.com/alexandergunnarson/defnt" |
15 | | - :license {:name "Creative Commons Attribution-ShareAlike 3.0 US (CC-SA)" |
16 | | - :url "https://creativecommons.org/licenses/by-sa/3.0/us/" |
17 | | - :distribution :repo} |
18 | | - :profiles |
19 | | - {:dev||test {:global-vars {*warn-on-reflection* true |
20 | | - *unchecked-math* :warn-on-boxed}} |
21 | | - :dev [:dev||test |
22 | | - {:dependencies ~(conj deps|clj-1-9 |
| 19 | +(def project-name 'quantum/defnt) |
| 20 | +(def version "0.2.1") |
| 21 | + |
| 22 | +(defn >base-profile [profile-ident #_keyword?] |
| 23 | + (let [relativized-version |
| 24 | + (if (= profile-ident :current) |
| 25 | + version |
| 26 | + (str version "-" (name profile-ident)))] |
| 27 | + {:version relativized-version |
| 28 | + :jar-name (str "defnt" "-" relativized-version ".jar") |
| 29 | + :uberjar-name (str "defnt" "-" relativized-version "-uberjar.jar") |
| 30 | + :pom-name (str "defnt" "-" relativized-version ".pom")})) |
| 31 | + |
| 32 | +(def profiles |
| 33 | + (let [dev||test {:global-vars '{*warn-on-reflection* true |
| 34 | + *unchecked-math* :warn-on-boxed}}] |
| 35 | + {:dev||test dev||test |
| 36 | + :dev (merge dev||test |
| 37 | + {:dependencies (conj deps|clj-1-9-0 |
23 | 38 | '[expound "0.6.0"] |
24 | 39 | '[orchestra "2017.11.12-1"] |
25 | | - '[org.clojure/test.check "0.9.0"])}] |
26 | | - :test [:dev||test] |
27 | | - :clj-1-8 {:dependencies ~(conj deps|clj-1-8 |
28 | | - '[org.clojure/test.check "0.9.0"])} |
29 | | - :clj-1-9 {:dependencies ~(conj deps|clj-1-9 |
30 | | - '[org.clojure/test.check "0.9.0"])}}) |
| 40 | + '[leiningen "2.8.0"])}) |
| 41 | + :test (merge dev||test) |
| 42 | + :clj-1.8.0 (-> (>base-profile :clj-1.8.0) |
| 43 | + (assoc :dependencies deps|clj-1-8-0)) |
| 44 | + :clj-1.9.0 (-> (>base-profile :clj-1.9.0) |
| 45 | + (assoc :dependencies deps|clj-1-9-0)) |
| 46 | + :current (-> (>base-profile :current) |
| 47 | + (assoc :dependencies deps|clj-1-9-0))})) |
| 48 | + |
| 49 | +(def config |
| 50 | + {:name project-name |
| 51 | + :version version |
| 52 | + :description "Where `defn` meets `clojure.spec` and a gradual-typing baby is born." |
| 53 | + :url "https://github.com/alexandergunnarson/defnt" |
| 54 | + :license {:name "Creative Commons Attribution-ShareAlike 3.0 US (CC-SA)" |
| 55 | + :url "https://creativecommons.org/licenses/by-sa/3.0/us/" |
| 56 | + :distribution :repo} |
| 57 | + :deploy-repositories |
| 58 | + {"clojars" {:url "https://repo.clojars.org" :username :gpg :password :gpg}} |
| 59 | + :profiles profiles}) |
| 60 | + |
| 61 | +(def the-project |
| 62 | + (leiningen.core.project/make config |
| 63 | + project-name version (some-> (clojure.java.io/file *file*) (.getParent)))) |
| 64 | + |
| 65 | +;; ===== Commands ===== ;; |
| 66 | + |
| 67 | +(defn >profiled-project [profile-ident] |
| 68 | + (-> the-project |
| 69 | + (merge (get profiles profile-ident)) |
| 70 | + ;; To prevent e.g.: |
| 71 | + ;; `[clojure-future-spec "1.9.0-beta4"]` and |
| 72 | + ;; `[clojure-future-spec/clojure-future-spec "1.9.0-beta4" :scope "test"]` |
| 73 | + (dissoc :profiles) |
| 74 | + leiningen.core.project/init-project)) |
| 75 | + |
| 76 | +(defn write-jar! [profile-ident #_keyword?] |
| 77 | + (clojure.java.shell/sh "rm" "-rf" "./target") |
| 78 | + (leiningen.jar/jar (>profiled-project profile-ident))) |
| 79 | + |
| 80 | +(defn write-pom! [profile-ident #_keyword?] |
| 81 | + (leiningen.pom/pom (>profiled-project profile-ident) |
| 82 | + (get-in profiles [profile-ident :pom-name]))) |
| 83 | + |
| 84 | +(defn deploy! [profile-ident #_keyword?] |
| 85 | + (write-jar! profile-ident) |
| 86 | + (write-pom! profile-ident) |
| 87 | + (leiningen.deploy/deploy |
| 88 | + (>profiled-project profile-ident) |
| 89 | + "clojars" |
| 90 | + (str project-name) |
| 91 | + (get-in profiles [profile-ident :version]) |
| 92 | + (str "./target/" (get-in profiles [profile-ident :jar-name])) |
| 93 | + (str "./" (get-in profiles [profile-ident :pom-name])))) |
| 94 | + |
| 95 | +;; A more flexible `:aliases` |
| 96 | +;; E.g. LEIN_COMMAND="deploy-all" lein |
| 97 | +(when-let [command (System/getenv "LEIN_COMMAND")] |
| 98 | + (case command |
| 99 | + "deploy-all" (do (deploy! :clj-1.8.0) |
| 100 | + (deploy! :clj-1.9.0) |
| 101 | + (deploy! :current)) |
| 102 | + (throw (ex-info "Unhandled command" {:command command})))) |
31 | 103 |
|
| 104 | +(def project the-project) |
0 commit comments