Skip to content

Commit 6ba8e2a

Browse files
committed
Simplify electric artifact build process
1 parent aff4efc commit 6ba8e2a

File tree

5 files changed

+42
-117
lines changed

5 files changed

+42
-117
lines changed

deps.edn

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
{:paths ["src"]
1+
{:hyperfiddle.build/name com.hyperfiddle/electric
2+
:hyperfiddle.build/description "A reactive Clojure dialect for web development that uses a compiler to infer the frontend/backend boundary"
3+
:hyperfiddle.build/version "v3-alpha-SNAPSHOT"
4+
:hyperfiddle.build/pom-data [[:licenses
5+
[:license
6+
[:name "Hyperfiddle Business Source License"]
7+
[:url "http://hyperfiddle.net"]]]
8+
[:developers
9+
[:developer
10+
[:organization "Hyperfiddle, Inc."]
11+
[:organizationUrl "http://www.hyperfiddle.net"]]]]
12+
:hyperfiddle.build/pom-scm {:url "https://github.com/hyperfiddle/electric"
13+
:connection "scm:git:git://github.com/hyperfiddle/electric.git"
14+
:developerConnection "scm:git:ssh://git@github.com/hyperfiddle/electric.git"}
15+
:paths ["src"]
216
:deps {
317
com.cognitect/transit-clj {:mvn/version "1.0.333"}
418
com.cognitect/transit-cljs {:mvn/version "0.8.280"}
@@ -32,6 +46,6 @@
3246
}}
3347
:build {:extra-paths ["src-build"]
3448
:ns-default build
35-
:extra-deps {io.github.clojure/tools.build {:mvn/version "0.9.6"}
36-
slipset/deps-deploy {:mvn/version "0.2.2"}}}
37-
:release {:override-deps {com.hyperfiddle/hyperfiddle-contrib {:mvn/version "v0-alpha-SNAPSHOT"}}}}}
49+
:extra-deps {com.hyperfiddle/build {:local/root "../build"}}}
50+
:release {:override-deps {com.hyperfiddle/hyperfiddle-contrib {:mvn/version "v0-alpha-SNAPSHOT"}}}}
51+
}

src-build/build.clj

Lines changed: 19 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,21 @@
11
(ns build
2-
"build electric.jar library artifact"
3-
(:require [clojure.tools.build.api :as b]
4-
[deps-deploy.deps-deploy :as dd]))
2+
(:require [clojure.tools.build.api :as tools.build]
3+
[hyperfiddle.build :as build]))
4+
5+
;; Expose generic tasks
6+
(def clean #'build/clean)
7+
(def install #'build/install)
8+
(def deploy #'build/deploy)
9+
10+
(defn build [opts] ; custom build task because of AOT
11+
(build/clean opts)
12+
(let [basis (partial build/create-basis :project "deps.edn", :extra "../electric-secret/deps.edn")
13+
{:keys [class-dir src-dirs] :as opts} (build/defaults (basis :aliases [:release]) opts)]
14+
(tools.build/write-pom opts)
15+
(tools.build/copy-dir {:src-dirs src-dirs, :target-dir class-dir})
16+
(tools.build/compile-clj {:basis (basis :aliases [:release :build-deps])
17+
:class-dir class-dir
18+
:ns-compile '[hyperfiddle.electric.impl.entrypoint hyperfiddle.electric.impl.auth hyperfiddle.electric.impl.jwt hyperfiddle.electric.impl.auth0 hyperfiddle.electric.shadow-cljs.hooks3]
19+
:filter-nses '[hyperfiddle.electric.impl.entrypoint hyperfiddle.electric.impl.auth hyperfiddle.electric.impl.jwt hyperfiddle.electric.impl.auth0 hyperfiddle.electric.shadow-cljs.hooks3]})
20+
(tools.build/jar opts)))
521

6-
(def lib 'com.hyperfiddle/electric)
7-
(def version "v3-alpha-SNAPSHOT" #_(b/git-process {:git-args "describe --long --always --dirty"}))
8-
(def basis (b/create-basis {:project "deps.edn", :extra "../electric-secret/deps.edn", :aliases [:release]}))
9-
(def aot-basis (b/create-basis {:project "deps.edn", :extra "../electric-secret/deps.edn", :aliases [:release :build-deps]}))
10-
11-
(def class-dir "target/classes")
12-
13-
(def defaults {:src-pom "src-build/pom-template.xml" :lib lib :class-dir class-dir})
14-
15-
(defn clean [opts] (b/delete {:path "target"}))
16-
17-
(defn build [{:keys [version] :or {version version} :as opts}]
18-
(clean opts)
19-
(let [jar-file (format "target/%s-%s.jar" (name lib) version)
20-
opts (assoc defaults
21-
:version version
22-
:basis basis
23-
:class-dir class-dir
24-
:jar-file jar-file
25-
:scm {:tag version}
26-
:src-dirs ["src"])]
27-
(println "Writing pom.xml")
28-
(b/write-pom opts)
29-
(println "Copying resources to" class-dir)
30-
(b/copy-dir {:src-dirs ["src"], :target-dir class-dir})
31-
(b/compile-clj {:basis aot-basis
32-
:class-dir class-dir
33-
:ns-compile '[hyperfiddle.electric.impl.entrypoint hyperfiddle.electric.impl.auth hyperfiddle.electric.impl.jwt hyperfiddle.electric.impl.auth0 hyperfiddle.electric.shadow-cljs.hooks3]
34-
:filter-nses '[hyperfiddle.electric.impl.entrypoint hyperfiddle.electric.impl.auth hyperfiddle.electric.impl.jwt hyperfiddle.electric.impl.auth0 hyperfiddle.electric.shadow-cljs.hooks3]})
35-
(println "Building jar" jar-file)
36-
(b/jar opts)))
37-
38-
(defn install [{:keys [version] :or {version version}}]
39-
(let [jar-file (format "target/%s-%s.jar" (name lib) version)]
40-
(b/install {:basis basis
41-
:lib lib
42-
:version version
43-
:jar-file jar-file
44-
:class-dir class-dir})))
45-
46-
(defn deploy [opts] ; clojars
47-
(let [{:keys [lib version class-dir installer jar-file] :as opts} (merge defaults opts)]
48-
(assert version ":version is required to deploy")
49-
(when (and installer (not= :remote installer))
50-
(println ":installer" installer "is deprecated -- use install task for local deployment"))
51-
(let [jar-file (or jar-file (format "target/%s-%s.jar" (name (or lib 'application)) version))]
52-
(dd/deploy (merge {:installer :remote :artifact (b/resolve-path jar-file)
53-
:pom-file (b/pom-path {:lib lib :class-dir class-dir})}
54-
opts)))))
55-
56-
;; For reference
57-
#_
58-
(defn compile-java [_]
59-
(b/javac {:src-dirs ["src"]
60-
:class-dir "src"
61-
:basis basis
62-
:javac-opts ["-source" "8" "-target" "8"]}))

src-build/build.md

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,15 @@
11
# Build clojars maven artifact — Electric
22

3-
* versioning scheme is: `v3-alpha-0-g9aae7b1b`
4-
* `v3`: brand/marketing major version, prefixed by the literal 'v'
5-
* `alpha`: maturity in {alpha,beta,rc}; see https://clojure.org/releases/devchangelog
6-
* `0`: number of commits since the tag
7-
* `g9aae7b1b`: git sha, prefixed by the literal 'g'
8-
3+
Build version is to be set under `deps.edn` > `:hyperfiddle.build/version`.
94

105
```shell
11-
git tag v3-alpha # manually set a new tag, or skip to use commit distance from current tag
12-
clojure -T:build clean
13-
#clj -A:dev -T user/release -- distribute sources, lib consumer will build
14-
# HYPERFIDDLE_ELECTRIC_BUILD=`git describe --tags --long --always --dirty` # for definitive, immutable releases
15-
# HYPERFIDDLE_ELECTRIC_BUILD=`git describe --tags --abbrev=0`-SNAPSHOT # for overwritable maven artifacts
16-
HYPERFIDDLE_ELECTRIC_BUILD="v3-alpha-SNAPSHOT"
17-
echo $HYPERFIDDLE_ELECTRIC_BUILD
18-
clojure -T:build jar :version '"'$HYPERFIDDLE_ELECTRIC_BUILD'"'
19-
clojure -T:build install :version '"'$HYPERFIDDLE_ELECTRIC_BUILD'"'
6+
clojure -T:build build
7+
clojure -T:build install
208
# To test in electric-starter-app:
21-
clj -A:dev -X dev/-main -Sdeps '{:deps {com.hyperfiddle/electric {:mvn/version "'$HYPERFIDDLE_ELECTRIC_BUILD'"}}}'
9+
clj -A:dev -X dev/-main -Sdeps '{:deps {com.hyperfiddle/electric {:mvn/version "<installed version>"}}}'
2210
# No way to test remote clojars version without rm in .m2/repositories/com/hyperfiddle
2311
# Optional: test electric-starter-app with local maven install
24-
env $(cat .env | xargs) clojure -T:build deploy :version '"'$HYPERFIDDLE_ELECTRIC_BUILD'"'
12+
env $(cat .env | xargs) clojure -T:build deploy
2513
```
2614

2715
- `CLOJARS_USERNAME` is your clojars username.

src-build/build.sh

Lines changed: 0 additions & 12 deletions
This file was deleted.

src-build/pom-template.xml

Lines changed: 0 additions & 24 deletions
This file was deleted.

0 commit comments

Comments
 (0)