Skip to content

Commit a36faa9

Browse files
authoredNov 3, 2020
Test clj uberjar (#285)
* Start on testing clj cli tools * Added test-clj-template to Makefile and CI * Clean up deps.edn + Dockerfile * Optimised CI runtime * First draft of handling deps.edn version bump * Deleted TODO
1 parent f16d6ac commit a36faa9

12 files changed

+124
-9
lines changed
 

‎.github/workflows/continuous-integration.yml

+3-2
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,15 @@ jobs:
4141
uses: docker://zeroonetechnology/geni:latest
4242
with:
4343
entrypoint: scripts/test-geni-cli
44-
test-lein-template:
44+
test-templates:
4545
runs-on: ubuntu-latest
4646
steps:
4747
- uses: actions/checkout@v2
4848
- name: test-lein-template
4949
uses: docker://zeroonetechnology/geni:latest
5050
with:
51-
entrypoint: scripts/test-lein-template
51+
entrypoint: /bin/bash
52+
args: -c "scripts/test-lein-template && scripts/test-clj-app-uberjar"
5253
test-install-geni-cli:
5354
runs-on: ubuntu-latest
5455
steps:

‎CONTRIBUTING.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ instead of `(complement :slow)`, and start tagging midje facts with `:streaming`
6060
- Run `make version-bumps` or manually Bump the versions in:
6161
- `project.clj`.
6262
- `lein-template`'s `project.clj`;
63-
- `lein-template`'s `resources/.../project.clj`; and
64-
- `resources/GENI_REPL_RELEASED_VERSION`.
63+
- `lein-template`'s `resources/.../project.clj`;
64+
- `resources/GENI_REPL_RELEASED_VERSION`;
65+
- `docker/deps.edn`; and
66+
- `examples/geni-clj-app/deps.edn`.
6567
- Ensure that the pre-release CI steps pass with `make pre-release`.
6668
- Deploy the main library with `lein deploy clojars`.
6769
- Ensure that the post-release CI steps pass with `make post-release`.

‎Makefile

+4-4
Original file line numberDiff line numberDiff line change
@@ -51,19 +51,19 @@ test-geni-cli: build
5151
docker run --rm -v $(TMP):/root/geni -w /root/geni -t $(DOCKERNAME) \
5252
scripts/test-geni-cli
5353

54-
test-lein-template: build
54+
test-templates: build
5555
$(eval TMP := $(shell mktemp -d))
5656
cp -r . $(TMP)
5757
docker run --rm -v $(TMP):/root/geni -w /root/geni -t $(DOCKERNAME) \
58-
scripts/test-lein-template
58+
/bin/bash -c "scripts/test-lein-template && scripts/test-clj-app-uberjar"
5959

6060
test-install-geni-cli: build
6161
$(eval TMP := $(shell mktemp -d))
6262
cp -r . $(TMP)
6363
docker run --rm -v $(TMP):/root/geni -w /root/geni -t $(DOCKERNAME) \
6464
scripts/test-install-geni-cli
6565

66-
ci: coverage test-install-geni-cli test-geni-cli test-lein-template lint-ancient
66+
ci: coverage test-install-geni-cli test-geni-cli test-templates lint-ancient
6767
echo "CI steps passed!"
6868

6969
version-bumps: build
@@ -73,5 +73,5 @@ version-bumps: build
7373
pre-release: coverage test-install-geni-cli test-geni-cli lint-ancient
7474
echo "Pre-release steps passed!"
7575

76-
post-release: test-lein-template
76+
post-release: test-templates
7777
echo "Post-release steps passed!"

‎docker/Dockerfile

+11-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ ENV HOME /root
66
# Install other dependencies
77
RUN apt-get update && apt-get install -y libgomp1 libatlas3-base libopenblas-base
88

9+
# Install Clojure CLI
10+
RUN apt-get install -y rlwrap
11+
RUN curl -O https://download.clojure.org/install/linux-install-1.10.1.727.sh
12+
RUN chmod +x linux-install-1.10.1.727.sh
13+
RUN ./linux-install-1.10.1.727.sh
14+
915
# Install clj-kondo and babashka
1016
RUN bash -c "bash <(curl -s https://raw.githubusercontent.com/borkdude/clj-kondo/master/script/install-clj-kondo)"
1117
RUN curl -s https://raw.githubusercontent.com/borkdude/babashka/master/install -o install-babashka
@@ -18,7 +24,11 @@ RUN cd /root && lein with-profile +dev deps
1824
# Install other dependencies and plugins
1925
ADD project.clj /root/project.clj
2026
RUN cd /root && lein with-profile +dev deps
21-
2227
RUN cd /root/ && lein cloverage || true
2328

29+
# Install deps.edn dependencies
30+
ADD deps.edn /root/deps.edn
31+
ADD deps-project.clj /root/project.clj
32+
RUN cd /root && lein with-profile +dev deps
33+
2434
ENTRYPOINT []

‎docker/deps-project.clj

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
(defproject geni-uberjar-example "0.0.1-SNAPSHOT"
2+
3+
:source-paths []
4+
:resource-paths []
5+
:main user
6+
:aot [user]
7+
:jar-name "geni-uberjar-example-%s.jar"
8+
:plugins [[lein-tools-deps "0.4.5"]]
9+
:middleware [lein-tools-deps.plugin/resolve-dependencies-with-deps-edn]
10+
:lein-tools-deps/config {:config-files [:install :project]})

‎docker/deps.edn

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{:deps
2+
{io.netty/netty-all {:mvn/version "4.1.53.Final"}
3+
;; Spark
4+
org.apache.spark/spark-core_2.12 {:mvn/version "3.0.1"}
5+
org.apache.spark/spark-mllib_2.12 {:mvn/version "3.0.1"}
6+
org.apache.spark/spark-sql_2.12 {:mvn/version "3.0.1"}
7+
org.apache.spark/spark-streaming_2.12 {:mvn/version "3.0.1"}
8+
;; Databases
9+
mysql/mysql-connector-java {:mvn/version "8.0.21"}
10+
org.postgresql/postgresql {:mvn/version "42.2.16"}
11+
org.xerial/sqlite-jdbc {:mvn/version "3.32.3.2"}
12+
;; Optional: Spark XGBoost
13+
ml.dmlc/xgboost4j-spark_2.12 {:mvn/version "1.0.0"}
14+
ml.dmlc/xgboost4j_2.12 {:mvn/version "1.0.0"}
15+
;; Geni
16+
zero.one/geni {:mvn/version "0.0.34"}}}

‎examples/geni-clj-app/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
target

‎examples/geni-clj-app/deps.edn

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{:deps
2+
{io.netty/netty-all {:mvn/version "4.1.53.Final"}
3+
;; Spark
4+
org.apache.spark/spark-core_2.12 {:mvn/version "3.0.1"}
5+
org.apache.spark/spark-mllib_2.12 {:mvn/version "3.0.1"}
6+
org.apache.spark/spark-sql_2.12 {:mvn/version "3.0.1"}
7+
org.apache.spark/spark-streaming_2.12 {:mvn/version "3.0.1"}
8+
;; Databases
9+
mysql/mysql-connector-java {:mvn/version "8.0.21"}
10+
org.postgresql/postgresql {:mvn/version "42.2.16"}
11+
org.xerial/sqlite-jdbc {:mvn/version "3.32.3.2"}
12+
;; Optional: Spark XGBoost
13+
ml.dmlc/xgboost4j-spark_2.12 {:mvn/version "1.0.0"}
14+
ml.dmlc/xgboost4j_2.12 {:mvn/version "1.0.0"}
15+
;; Geni
16+
zero.one/geni {:mvn/version "0.0.34"}}}

‎examples/geni-clj-app/project.clj

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
(defproject geni-uberjar-example "0.0.1-SNAPSHOT"
2+
3+
:source-paths []
4+
:resource-paths []
5+
:main user
6+
:aot [user]
7+
:jar-name "geni-uberjar-example-%s.jar"
8+
:plugins [[lein-tools-deps "0.4.5"]]
9+
:middleware [lein-tools-deps.plugin/resolve-dependencies-with-deps-edn]
10+
:lein-tools-deps/config {:config-files [:install :project]})

‎examples/geni-clj-app/src/user.clj

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
(ns user
2+
(:require [zero-one.geni.core :as g]
3+
[zero-one.geni.defaults :as defaults])
4+
(:gen-class))
5+
6+
(defn -main
7+
[]
8+
(println (g/spark-conf @defaults/spark)))

‎scripts/test-clj-app-uberjar

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
cd examples/geni-clj-app
6+
7+
lein uberjar
8+
java -jar target/geni-uberjar-example-0.0.1-SNAPSHOT-standalone.jar > target/clj-app-stdout
9+
cat target/clj-app-stdout
10+
if ! grep -q ":spark.app.name Geni App" target/clj-app-stdout ; then
11+
echo "Geni clj app failed to run!"
12+
exit 1
13+
fi
14+
15+
cd -

‎scripts/version-bumps.clj

+26
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,12 @@
1515
(def generated-project-clj-path
1616
"lein-template/resources/leiningen/new/geni/project.clj")
1717

18+
(def docker-deps-edn-path
19+
"docker/deps.edn")
20+
21+
(def example-clj-app-deps-edn-path
22+
"examples/geni-clj-app/deps.edn")
23+
1824
;; Bump GENI_RELEASED_VERSION
1925
(def current-released-version
2026
(string/replace (slurp released-version-path) #"\n" ""))
@@ -56,8 +62,28 @@
5662
(re-pattern (dep-str project-name current-released-version))
5763
(dep-str project-name bumped-released-version)))
5864

65+
;; deps.edn
66+
(defn mvn-str [version]
67+
(str ":mvn/version \"" version "\""))
68+
69+
(def current-docker-deps-edn (slurp docker-deps-edn-path))
70+
71+
(def bumped-docker-deps-edn
72+
(string/replace current-docker-deps-edn
73+
(re-pattern (mvn-str current-released-version))
74+
(mvn-str bumped-released-version)))
75+
76+
(def current-example-clj-app-deps-edn (slurp example-clj-app-deps-edn-path))
77+
78+
(def bumped-example-clj-app-deps-edn
79+
(string/replace current-example-clj-app-deps-edn
80+
(re-pattern (mvn-str current-released-version))
81+
(mvn-str bumped-released-version)))
82+
5983
;; Write the changes
6084
(spit project-clj-path bumped-project-clj)
6185
(spit template-project-clj-path bumped-template-project-clj)
6286
(spit generated-project-clj-path bumped-generated-project-clj)
6387
(spit released-version-path bumped-released-version)
88+
(spit docker-deps-edn-path bumped-docker-deps-edn)
89+
(spit example-clj-app-deps-edn-path bumped-example-clj-app-deps-edn)

0 commit comments

Comments
 (0)
Please sign in to comment.