Skip to content

Commit

Permalink
new tools.build for versioning and building jars
Browse files Browse the repository at this point in the history
  • Loading branch information
csummers committed Aug 6, 2023
1 parent b40a378 commit 1244a09
Show file tree
Hide file tree
Showing 15 changed files with 203 additions and 75 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/lint-test-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,3 +73,6 @@ jobs:

- name: Test
run: bin/kaocha

- name: Build Jars
run: clojure -T:build jars
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ A Clojure library for embracing SQL.
- [CHANGELOG](https://github.com/layerware/hugsql/blob/master/CHANGELOG.md)

---
Copyright © 2022 [Layerware, Inc.](http://www.layerware.com)
Copyright © 2023 Curtis Summers
Distributed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.html)
122 changes: 122 additions & 0 deletions build.clj
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
(ns build
(:require [clojure.tools.build.api :as b]
[clojure.edn :as edn]
[borkdude.rewrite-edn :as rewrite-edn]))

(def group "com.layerware")

;; these match lib paths, deps.edn aliases; order matters!
(def libs ["hugsql-adapter"
"hugsql-adapter-clojure-java-jdbc"
"hugsql-adapter-clojure-jdbc"
"hugsql-adapter-next-jdbc"
"hugsql-core"
"hugsql"])

(defn- lib-symbol [lib]
(symbol group lib))

(defn- deps-edn []
(->> (slurp "deps.edn")
(edn/read-string)))

(defn- lib-src [lib]
(-> (deps-edn)
(get-in [:aliases (keyword (format "%s-src" lib))])))

(defn- set-version-in-lib [lib version]
;; update versions for all hugsql libs in each of the lib deps.edn files
(let [deps-edn (format "%s/deps.edn" lib)
nodes (->> deps-edn
(slurp)
(rewrite-edn/parse-string))]
(->> libs
(reduce (fn [nodes l]
(if (rewrite-edn/sexpr (rewrite-edn/get-in nodes [:deps (lib-symbol l)]))
(rewrite-edn/assoc-in nodes [:deps (lib-symbol l)] {:mvn/version version})
nodes))
nodes)
(spit deps-edn))))

(defn- set-version-in-libs [version]
(doseq [lib libs]
(set-version-in-lib lib version)))

(defn- get-version []
(-> (slurp "version.edn")
(edn/read-string)
(:version)))

(defn- set-version [{:keys [version]}]
(let [full-version (format "%s.%s" version (b/git-count-revs nil))]
(->> full-version
(hash-map :version)
(pr-str)
(spit "version.edn"))
(set-version-in-libs full-version)))

(defn version
"Get or set the version."
([] (version {}))
([{:keys [version]}]
(when version
(set-version {:version version}))
(println (get-version))))


(defn- class-dir [lib]
(format "%s/target/classes" lib))

(defn- basis [lib]
(b/create-basis {:project (format "%s/deps.edn" lib)}))

(defn- jar-file [lib]
(format "%s/target/%s-%s.jar" lib lib (get-version)))

(defn- clean-lib [lib]
(b/delete {:path (format "%s/target" lib)}))

(defn clean [_]
(doseq [lib libs]
(clean-lib lib)))

(defn- jar [lib]
(b/write-pom {:class-dir (class-dir lib)
:lib (lib-symbol lib)
:version (get-version)
:basis (basis lib)
:src-dirs (lib-src lib)})
(b/copy-dir {:src-dirs (lib-src lib)
:target-dir (class-dir lib)})
(b/jar {:class-dir (class-dir lib)
:jar-file (jar-file lib)}))

(defn- install-lib [lib]
(b/install {:class-dir (class-dir lib)
:lib (lib-symbol lib)
:version (get-version)
:basis (basis lib)
:src-dirs (lib-src lib)
:jar-file (jar-file lib)}))


(defn jars
"Build and install jars.
Due to dependencies, each lib jars must be installed locally before building subsequent lib jars."
[_]
(doseq [lib libs]
(jar lib)
(install-lib lib)))

(comment

(get-version)
(set-version {:version "1.0"})
(version)
(version {:version "1.0"})

(clean {})
(jars {})

;;
)
104 changes: 44 additions & 60 deletions deps.edn
Original file line number Diff line number Diff line change
@@ -1,66 +1,50 @@
{:aliases
{:dev {:extra-paths []
:extra-deps {}}
;; paths
:path-core-src ["hugsql-core/src"]
:path-adapter-src ["hugsql-adapter/src"]
:path-adapter-clojure-java-jdbc-src ["hugsql-adapter-clojure-java-jdbc/src"]
:path-adapter-clojure-jdbc-src ["hugsql-adapter-clojure-jdbc/src"]
:path-adapter-next-jdbc-src ["hugsql-adapter-next-jdbc/src"]
{:dev {:extra-paths []
:extra-deps {}}
;; libraries
:hugsql {:local/root "hugsql"}
:hugsql-core {:local/root "hugsql-core"}
:hugsql-adapter {:local/root "hugsql-adapter"}
:hugsql-adapter-clojure-java-jdbc {:local/root "hugsql-adapter-clojure-java-jdbc"}
:hugsql-adapter-clojure-jdbc {:local/root "hugsql-adapter-clojure-jdbc"}
:hugsql-adapter-next-jdbc {:local/root "hugsql-adapter-next-jdbc"}

:path-core-test ["hugsql-core/test"]
:path-adapter-test ["hugsql-adapter/test"]
:path-adapter-clojure-java-jdbc-test ["hugsql-adapter-clojure-java-jdbc/test"]
:path-adapter-clojure-jdbc-test ["hugsql-adapter-clojure-jdbc/test"]
:path-adapter-next-jdbc-test ["hugsql-adapter-next-jdbc/test"]
;; paths (used below, in build.clj, and in tests.edn)
:hugsql-core-src ["hugsql-core/src"]
:hugsql-adapter-src ["hugsql-adapter/src"]
:hugsql-adapter-clojure-java-jdbc-src ["hugsql-adapter-clojure-java-jdbc/src"]
:hugsql-adapter-clojure-jdbc-src ["hugsql-adapter-clojure-jdbc/src"]
:hugsql-adapter-next-jdbc-src ["hugsql-adapter-next-jdbc/src"]

;; libraries
:core {:extra-paths [:path-core-src]
:extra-deps {}}
:adapter {:extra-paths [:path-adapter-src]
:extra-deps {}}
:adapter-clojure-java-jdbc {:extra-paths [:path-adapter-clojure-java-jdbc-src]
:extra-deps {org.clojure/java.jdbc {:mvn/version "0.7.12"}}}
:adapter-clojure-jdbc {:extra-paths [:path-adapter-clojure-jdbc-src]
:extra-deps {funcool/clojure.jdbc {:mvn/version "0.9.0"}}}
:adapter-next-jdbc {:extra-paths [:path-adapter-next-jdbc-src]
:extra-deps {seancorfield/next.jdbc {:mvn/version "1.2.659"}}}
:hugsql-core-test ["hugsql-core/test"]
:hugsql-adapter-test ["hugsql-adapter/test"]
:hugsql-adapter-clojure-java-jdbc-test ["hugsql-adapter-clojure-java-jdbc/test"]
:hugsql-adapter-clojure-jdbc-test ["hugsql-adapter-clojure-jdbc/test"]
:hugsql-adapter-next-jdbc-test ["hugsql-adapter-next-jdbc/test"]

;; tests
:test-core {:extra-paths [:path-core-test]
:extra-deps {org.apache.derby/derby {:mvn/version "10.16.1.1"}
org.postgresql/postgresql {:mvn/version "42.6.0"}
com.mysql/mysql-connector-j {:mvn/version "8.1.0"}
org.xerial/sqlite-jdbc {:mvn/version "3.42.0.0"}
org.hsqldb/hsqldb {:mvn/version "2.7.2"}
com.h2database/h2 {:mvn/version "2.2.220"}}}
:test-adapter {:extra-paths [:path-adapter-test]
:extra-deps {}}
:test-adapter-clojure-java-jdbc {:extra-paths [:path-adapter-clojure-java-jdbc-test]
:extra-deps {}}
:test-adapter-clojure-jdbc {:extra-paths [:path-adapter-clojure-jdbc-test]
:extra-deps {}}
:test-adapter-next-jdbc {:extra-paths [:path-adapter-next-jdbc-test]
:extra-deps {}}
:test {:main-opts ["-m" "kaocha.runner"]
:extra-deps {lambdaisland/kaocha {:mvn/version "1.85.1342"}
org.clojure/java.jdbc {:mvn/version "0.7.12"}
funcool/clojure.jdbc {:mvn/version "0.9.0"}
seancorfield/next.jdbc {:mvn/version "1.2.659"}
org.apache.derby/derby {:mvn/version "10.16.1.1"}
org.postgresql/postgresql {:mvn/version "42.6.0"}
com.mysql/mysql-connector-j {:mvn/version "8.1.0"}
org.xerial/sqlite-jdbc {:mvn/version "3.42.0.0"}
org.hsqldb/hsqldb {:mvn/version "2.7.2"}
com.h2database/h2 {:mvn/version "2.2.220"}}
:extra-paths [:hugsql-core-src
:hugsql-adapter-src
:hugsql-adapter-clojure-java-jdbc-src
:hugsql-adapter-clojure-jdbc-src
:hugsql-adapter-next-jdbc-src
:hugsql-core-test
:hugsql-adapter-test
:hugsql-adapter-clojure-java-jdbc-test
:hugsql-adapter-clojure-jdbc-test
:hugsql-adapter-next-jdbc-test]}

:test {:main-opts ["-m" "kaocha.runner"]
:extra-deps {lambdaisland/kaocha {:mvn/version "1.85.1342"}
org.clojure/java.jdbc {:mvn/version "0.7.12"}
funcool/clojure.jdbc {:mvn/version "0.9.0"}
seancorfield/next.jdbc {:mvn/version "1.2.659"}
org.apache.derby/derby {:mvn/version "10.16.1.1"}
org.postgresql/postgresql {:mvn/version "42.6.0"}
com.mysql/mysql-connector-j {:mvn/version "8.1.0"}
org.xerial/sqlite-jdbc {:mvn/version "3.42.0.0"}
org.hsqldb/hsqldb {:mvn/version "2.7.2"}
com.h2database/h2 {:mvn/version "2.2.220"}}
:extra-paths [:path-core-src
:path-adapter-src
:path-adapter-clojure-java-jdbc-src
:path-adapter-clojure-jdbc-src
:path-adapter-next-jdbc-src
:path-core-test
:path-adapter-test
:path-adapter-clojure-java-jdbc-test
:path-adapter-clojure-jdbc-test
:path-adapter-next-jdbc-test]}}}
:build {:deps {io.github.clojure/tools.build {:mvn/version "0.9.4"}
borkdude/rewrite-edn {:mvn/version "0.4.6"}}
:ns-default build}}}
5 changes: 3 additions & 2 deletions docs/hugsql.org/docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ const config = {
docs: {
routeBasePath: "/",
sidebarPath: require.resolve("./sidebars.js"),
editUrl: "https://github.com/layerware/hugsql/edit/master/docs/hugsql.org/",
editUrl:
"https://github.com/layerware/hugsql/edit/master/docs/hugsql.org/",
},
theme: {
customCss: require.resolve("./src/css/custom.css"),
Expand Down Expand Up @@ -69,7 +70,7 @@ const config = {
footer: {
style: "dark",
links: [],
copyright: `Copyright © ${new Date().getFullYear()} Layerware, Inc.`,
copyright: `Copyright © ${new Date().getFullYear()} Curtis Summers`,
},
prism: {
theme: lightCodeTheme,
Expand Down
2 changes: 1 addition & 1 deletion examples/princess-bride/deps.edn
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{:paths ["src" "resources"]
{:paths ["src"]
:deps {com.layerware/hugsql {:mvn/version "0.5.3"}
com.h2database/h2 {:mvn/version "1.4.196"}}
:aliases {:uberjar {:replace-deps {com.github.seancorfield/depstar {:mvn/version "2.1.303"}}
Expand Down
2 changes: 1 addition & 1 deletion examples/princess-bride/project.clj
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@
:profiles {:uberjar {:aot :all
:omit-source true}}
:dependencies [[org.clojure/clojure "1.8.0"]
[com.layerware/hugsql "0.5.3"]
[com.layerware/hugsql "1.0.227"]
[com.h2database/h2 "1.4.196"]])
3 changes: 3 additions & 0 deletions hugsql-adapter-clojure-java-jdbc/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{:paths ["src"]
:deps {com.layerware/hugsql-adapter {:mvn/version "1.0.227"}
org.clojure/java.jdbc {:mvn/version "0.7.12"}}}
3 changes: 3 additions & 0 deletions hugsql-adapter-clojure-jdbc/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{:paths ["src"]
:deps {com.layerware/hugsql-adapter {:mvn/version "1.0.227"}
funcool/clojure.jdbc {:mvn/version "0.9.0"}}}
3 changes: 3 additions & 0 deletions hugsql-adapter-next-jdbc/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{:paths ["src"]
:deps {com.layerware/hugsql-adapter {:mvn/version "1.0.227"}
seancorfield/next.jdbc {:mvn/version "1.2.659"}}}
2 changes: 2 additions & 0 deletions hugsql-adapter/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
{:paths ["src"]
:deps {}}
3 changes: 3 additions & 0 deletions hugsql-core/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{:paths ["src"]
:deps {com.layerware/hugsql-adapter {:mvn/version "1.0.227"}
org.clojure/tools.reader {:mvn/version "1.3.6"}}}
3 changes: 3 additions & 0 deletions hugsql/deps.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{:paths []
:deps {com.layerware/hugsql-core {:mvn/version "1.0.227"}
com.layerware/hugsql-adapter-clojure-java-jdbc {:mvn/version "1.0.227"}}}
20 changes: 10 additions & 10 deletions tests.edn
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{;; use aero #include and #ref to bring in deps.edn paths
:deps.edn #include "deps.edn"
:core/source-paths #ref [:deps.edn :aliases :path-core-src]
:core/test-paths #ref [:deps.edn :aliases :path-core-test]
:adapter/source-paths #ref [:deps.edn :aliases :path-adapter-src]
:adapter/test-paths #ref [:deps.edn :aliases :path-adapter-test]
:adapter-clojure-java-jdbc/source-paths #ref [:deps.edn :aliases :path-adapter-clojure-java-jdbc-src]
:adapter-clojure-java-jdbc/test-paths #ref [:deps.edn :aliases :path-adapter-clojure-java-jdbc-test]
:adapter-clojure-jdbc/source-paths #ref [:deps.edn :aliases :path-adapter-clojure-jdbc-src]
:adapter-clojure-jdbc/test-paths #ref [:deps.edn :aliases :path-adapter-clojure-jdbc-test]
:adapter-next-jdbc/source-paths #ref [:deps.edn :aliases :path-adapter-next-jdbc-src]
:adapter-next-jdbc/test-paths #ref [:deps.edn :aliases :path-adapter-next-jdbc-test]
:core/source-paths #ref [:deps.edn :aliases :hugsql-core-src]
:core/test-paths #ref [:deps.edn :aliases :hugsql-core-test]
:adapter/source-paths #ref [:deps.edn :aliases :hugsql-adapter-src]
:adapter/test-paths #ref [:deps.edn :aliases :hugsql-adapter-test]
:adapter-clojure-java-jdbc/source-paths #ref [:deps.edn :aliases :hugsql-adapter-clojure-java-jdbc-src]
:adapter-clojure-java-jdbc/test-paths #ref [:deps.edn :aliases :hugsql-adapter-clojure-java-jdbc-test]
:adapter-clojure-jdbc/source-paths #ref [:deps.edn :aliases :hugsql-adapter-clojure-jdbc-src]
:adapter-clojure-jdbc/test-paths #ref [:deps.edn :aliases :hugsql-adapter-clojure-jdbc-test]
:adapter-next-jdbc/source-paths #ref [:deps.edn :aliases :hugsql-adapter-next-jdbc-src]
:adapter-next-jdbc/test-paths #ref [:deps.edn :aliases :hugsql-adapter-next-jdbc-test]

:kaocha/tests [{:kaocha.testable/id :core
:kaocha.testable/type :kaocha.type/clojure.test
Expand Down
1 change: 1 addition & 0 deletions version.edn
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{:version "1.0.227"}

0 comments on commit 1244a09

Please sign in to comment.