diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..c14182e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +/.nrepl-port +/.cpcache +/classes +/target +/.clj-kondo +/heroku.yml +/app.json + diff --git a/.gitignore b/.gitignore index 9b7d22a..c7c66f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /.nrepl-port /.cpcache +/classes +/target /.clj-kondo/.cache diff --git a/Dockerfile.heroku b/Dockerfile.heroku new file mode 100644 index 0000000..16dd9de --- /dev/null +++ b/Dockerfile.heroku @@ -0,0 +1,18 @@ +FROM clojure:tools-deps as builder + +RUN mkdir /tmp/ecomspark + +WORKDIR /tmp/ecomspark + +copy deps.edn Makefile ./ +COPY src ./src +COPY resources ./resources + +RUN make uberjar + + +FROM adoptopenjdk/openjdk11 as runner + +COPY --from=builder /tmp/ecomspark/target/ecomspark.jar ./ + +ENTRYPOINT ["java","-jar","./ecomspark.jar"] diff --git a/Makefile b/Makefile index 2bf8a8e..4bfa88e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,26 @@ +.PHONY: run ancient clean uberjar run: clj -M:cider ancient: clj -M:cider:ancient + +clean: + rm -rf target classes .cpcache + +uberjar: target/ecomspark.jar + +define CLASS_BUILDER +(binding [clojure.core/*compiler-options* + {:direct-linking true + :elide-meta [:doc :file :line :added]}] + (compile (symbol "ecomspark.main"))) +endef +export CLASS_BUILDER + +classes: ./src/ecomspark deps.edn + mkdir -p classes + clj -M -e "$$CLASS_BUILDER" + +target/ecomspark.jar: classes ./src/ecomspark deps.edn + clojure -M:uberjar --main-class ecomspark.main diff --git a/README.md b/README.md index 4e27472..7dda1a6 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ This is an example of a working app with [TwinSpark](https://kasta-ua.github.io/ This is a simple eCommerce site: product list with endless scroll, where you can add a product to cart and so on. +[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) + ## Variants - [Python+Flask](https://github.com/vsolovyov/ecomspark-flask/) diff --git a/app.json b/app.json new file mode 100644 index 0000000..bdb754f --- /dev/null +++ b/app.json @@ -0,0 +1,6 @@ +{ + "name": "TwinSpark demo", + "description": "This is an example of a working app with TwinSpark", + "repository": "https://github.com/piranha/ecomspark", + "keywords": ["web", "framework", "frontendless", "ancient technology"] +} diff --git a/deps.edn b/deps.edn index c59574b..62127c3 100644 --- a/deps.edn +++ b/deps.edn @@ -1,4 +1,4 @@ -{:paths ["src" "resources"] +{:paths ["src" "resources" "classes"] :deps {org.clojure/clojure {:mvn/version "1.10.3"} org.slf4j/slf4j-api {:mvn/version "1.7.30"} @@ -20,4 +20,7 @@ "--middleware" "[cider.nrepl/cider-middleware,refactor-nrepl.middleware/wrap-refactor]"]} :ancient {:extra-deps {com.github.liquidz/antq {:mvn/version "RELEASE"}} - :main-opts ["-m" "antq.core"]}}} + :main-opts ["-m" "antq.core"]} + :uberjar {:replace-deps {uberdeps/uberdeps {:mvn/version "1.0.4"}} + :main-opts ["-m" "uberdeps.uberjar"] + :exec-args {:aot true}}}} diff --git a/heroku.yml b/heroku.yml new file mode 100644 index 0000000..3fa3eec --- /dev/null +++ b/heroku.yml @@ -0,0 +1,3 @@ +build: + docker: + web: Dockerfile.heroku diff --git a/src/ecomspark/main.clj b/src/ecomspark/main.clj index 5dee8dd..072d47f 100644 --- a/src/ecomspark/main.clj +++ b/src/ecomspark/main.clj @@ -6,10 +6,15 @@ [ecomspark.app :as app])) +(def default-port 5454) + (mount/defstate httpd - :start (do - (println "Starting HTTPd on :5454...") - (httpd/run-server app/app {:port 5454})) + :start (let [port (or (some->> "PORT" System/getenv Integer/parseInt) + default-port)] + (printf "Starting HTTPd on :%s...\n" port) + (flush) + (httpd/run-server app/app {:port port}) + (println "Done!")) :stop (httpd))