Skip to content

Commit 5bb58ac

Browse files
committed
Set up dokku deployment.
1 parent 2cbd20b commit 5bb58ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+591
-596
lines changed

.dir-locals.el

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,5 @@
22
(column-enforce-column . 70)
33
(cider-default-cljs-repl . shadow)
44
(cider-shadow-default-options . ":dev")
5-
(cider-shadow-cljs-global-options . "-A:dev:test"))))
5+
(cider-shadow-cljs-global-options . "-A:dev:backend:frontend:test")
6+
(cider-preferred-build-tool . shadow-cljs))))

.dockerignore

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
resources/public/js
2+
resources/public/css
3+
node_modules
4+
.cpcache
5+
.shadow-cljs
6+
.nrepl-port
7+
.clj-kondo/.cache
8+
target

.gitignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ node_modules
44
.cpcache
55
.shadow-cljs
66
.nrepl-port
7-
.clj-kondo/.cache
7+
.clj-kondo/.cache
8+
target

CHECKS

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/ My Gift List Rocks

Dockerfile.flyway

-7
This file was deleted.

Makefile

+22-4
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,32 @@
1-
.PHONY: test test-up test-down
1+
.PHONY: test test-up test-down migrate uberjar run build-report outdated
22

33
test:
44
POSTGRES_PORT=15433 docker-compose -p mygiftlist-blog-test up -d
5-
scripts/migrate-local.sh mygiftlist-blog-test_default
6-
clojure -A:dev:test:run-tests
5+
clojure -X:migrate :database-url '"postgresql://postgres:password@localhost:15433/postgres"'
6+
clojure -M:backend:dev:test:run-tests
77
docker-compose -p mygiftlist-blog-test down
88

99
test-up:
1010
POSTGRES_PORT=15433 docker-compose -p mygiftlist-blog-test up -d
11-
scripts/migrate-local.sh mygiftlist-blog-test_default
11+
clojure -X:migrate :database-url '"postgresql://postgres:password@localhost:15433/postgres"'
1212

1313
test-down:
1414
docker-compose -p mygiftlist-blog-test down
15+
16+
migrate:
17+
clojure -X:migrate :database-url '"postgresql://postgres:password@localhost:15432/postgres"'
18+
19+
uberjar:
20+
npm install
21+
npx shadow-cljs release prod
22+
npm run css-build
23+
clojure -X:depstar uberjar :jar target/mygiftlistrocks.jar :aliases '[:backend]'
24+
25+
run:
26+
java -cp target/mygiftlistrocks.jar clojure.main -m rocks.mygiftlist.main
27+
28+
build-report:
29+
npx shadow-cljs run shadow.cljs.build-report prod report.html
30+
31+
outdated:
32+
clojure -M:outdated -a backend,frontend,dev,test,depstar,migrate,outdated

Procfile

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
web: java -cp target/mygiftlistrocks.jar clojure.main -m rocks.mygiftlist.main
2+
release: clojure -X:migrate

README.md

+36-2
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ docker-compose up -d
2828
```
2929
After starting the database, you'll need to run migrations, which you can do with
3030
```bash
31-
./scripts/migrate-local.sh
31+
make migrate
3232
```
3333
There's also a convenience script available at `./scripts/psql` to open up a psql client connected to the database. There are resources to learn more about working with a database inside docker compose in the [documentation](https://docs.docker.com/compose/).
3434

3535
### Application
3636

3737
To run this application in development mode, start a shadow-cljs server with
3838
```bash
39-
npx shadow-cljs -A:dev:test -d nrepl:0.7.0 -d cider/piggieback:0.4.2 -d refactor-nrepl:2.5.0 -d cider/cider-nrepl:0.25.0-SNAPSHOT server
39+
npx shadow-cljs -A:dev:backend:frontend:test -d nrepl:0.8.2 -d cider/piggieback:0.5.1 -d refactor-nrepl:2.5.0 -d cider/cider-nrepl:0.25.3 server
4040
```
4141

4242
With this running, you can control compilation by accessing the shadow-cljs server at http://localhost:9630. In addition, this command will start up an nrepl server, which you should connect to with your preferred REPL. Alternatively, CIDER users can run `cider-jack-in-clj&cljs` and choose `shadow-cljs`.
@@ -59,3 +59,37 @@ With the test database up and running, you should be able to run tests. You can
5959
```bash
6060
make test-down
6161
```
62+
63+
## Deployment
64+
65+
To create an uberjar `target/mygiftlistrocks.jar` that includes production frontend assets, run
66+
```
67+
make uberjar
68+
```
69+
70+
You can then run this uberjar with
71+
```
72+
java -cp target/mygiftlistrocks.jar clojure.main -m rocks.mygiftlist.main
73+
```
74+
75+
You can run database migrations with
76+
```
77+
clojure -X:migrate :database-url '"postgresql://me:password@mydbhost:port/dbname"'
78+
```
79+
80+
You can deploy to dokku with
81+
```
82+
git push dokku master
83+
```
84+
85+
## Maintenance
86+
87+
To find outdated dependencies, you can run
88+
```
89+
make outdated
90+
```
91+
92+
To create a build report documenting how large frontend dependencies are in your bundle, run
93+
```
94+
make build-report
95+
```

bin/build

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
#!/usr/bin/env bash
2+
make uberjar

deps.edn

+46-31
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,52 @@
1-
{:paths ["src" "resources"]
2-
:deps {com.fulcrologic/fulcro {:mvn/version "3.2.6"}
3-
com.wsscode/pathom {:mvn/version "2.2.31"}
4-
edn-query-language/eql {:mvn/version "0.0.9"}
5-
com.taoensso/timbre {:mvn/version "4.10.0"}
6-
com.cognitect/transit-clj {:mvn/version "1.0.324"}
7-
ring/ring-core {:mvn/version "1.8.1"}
8-
ring/ring-defaults {:mvn/version "0.3.2"}
9-
bk/ring-gzip {:mvn/version "0.3.0"}
10-
com.auth0/java-jwt {:mvn/version "3.10.3"}
11-
com.auth0/jwks-rsa {:mvn/version "0.11.0"}
12-
integrant {:mvn/version "0.8.0"}
13-
seancorfield/next.jdbc {:mvn/version "1.0.424"}
14-
honeysql {:mvn/version "0.9.10"}
15-
nilenso/honeysql-postgres {:mvn/version "0.2.6"}
16-
org.postgresql/postgresql {:mvn/version "42.2.12"}
17-
hikari-cp {:mvn/version "2.12.0"}
18-
aero {:mvn/version "1.1.6"}
19-
http-kit {:mvn/version "2.4.0-alpha6"}}
20-
:aliases {:dev {:extra-paths ["dev"]
21-
:jvm-opts ["-Dtrace"]
22-
:extra-deps {org.clojure/tools.namespace {:mvn/version "1.0.0"}
23-
org.clojure/clojurescript {:mvn/version "1.10.764"}
24-
com.fulcrologic/semantic-ui-wrapper {:mvn/version "1.0.1"}
25-
org.clojure/core.async {:mvn/version "1.2.603"}
1+
{:paths ["resources" "src/cljc"]
2+
:deps {com.fulcrologic/fulcro {:mvn/version "3.4.10"
3+
:exclusions [cljsjs/react
4+
cljsjs/react-dom
5+
cljsjs/react-dom-server
6+
org.clojure/clojurescript]}
7+
edn-query-language/eql {:mvn/version "1.0.1"}
8+
com.taoensso/timbre {:mvn/version "5.1.0"}
9+
org.clojure/core.async {:mvn/version "1.3.610"}}
10+
:aliases {:backend {:extra-paths ["src/clj"]
11+
:extra-deps {com.wsscode/pathom {:mvn/version "2.3.0"}
12+
com.cognitect/transit-clj {:mvn/version "1.0.324"}
13+
ring/ring-core {:mvn/version "1.8.2"}
14+
http-kit/http-kit {:mvn/version "2.5.0"}
15+
ring/ring-defaults {:mvn/version "0.3.2"}
16+
bk/ring-gzip {:mvn/version "0.3.0"}
17+
com.auth0/java-jwt {:mvn/version "3.12.0"}
18+
com.auth0/jwks-rsa {:mvn/version "0.15.0"}
19+
integrant/integrant {:mvn/version "0.8.0"}
20+
seancorfield/next.jdbc {:mvn/version "1.1.613"}
21+
honeysql/honeysql {:mvn/version "1.0.444"}
22+
nilenso/honeysql-postgres {:mvn/version "0.2.6"}
23+
org.postgresql/postgresql {:mvn/version "42.2.18"}
24+
hikari-cp/hikari-cp {:mvn/version "2.13.0"}
25+
aero/aero {:mvn/version "1.1.6"}}}
26+
:frontend {:extra-paths ["src/cljs"]
27+
:extra-deps {org.clojure/clojurescript {:mvn/version "1.10.773"}
28+
com.fulcrologic/semantic-ui-wrapper {:mvn/version "2.0.1"}
2629
com.cognitect/transit-cljs {:mvn/version "0.8.264"}
27-
com.wsscode/async {:mvn/version "1.0.8"}
30+
com.wsscode/async {:mvn/version "1.0.13"}
2831
clj-commons/pushy {:mvn/version "0.3.10"}
29-
thheller/shadow-cljs {:mvn/version "2.9.6"}
30-
binaryage/devtools {:mvn/version "1.0.0"}
31-
integrant/repl {:mvn/version "0.3.1"}}}
32+
thheller/shadow-cljs {:mvn/version "2.11.10"}}}
33+
:dev {:extra-paths ["dev"]
34+
:jvm-opts ["-Dtrace"]
35+
:extra-deps {binaryage/devtools {:mvn/version "1.0.2"}
36+
integrant/repl {:mvn/version "0.3.2"}}}
3237
:test {:extra-paths ["test"]
3338
:extra-deps {com.cognitect/test-runner {:git/url "https://github.com/cognitect-labs/test-runner.git"
34-
:sha "f7ef16dc3b8332b0d77bc0274578ad5270fbfedd"}}}
39+
:sha "b6b3193fcc42659d7e46ecd1884a228993441182"}}}
3540
:run-tests {:main-opts ["-m" "cognitect.test-runner"]}
36-
:outdated {:extra-deps {olical/depot {:mvn/version "1.8.4"}}
41+
:migrate {:replace-paths ["migrate" "migrations"]
42+
;; For some reason, depot doesn't detect
43+
;; updated flyway versions. Update this
44+
;; manually periodically.
45+
:replace-deps {org.flywaydb/flyway-core {:mvn/version "7.3.2"}
46+
org.postgresql/postgresql {:mvn/version "42.2.18"}}
47+
:exec-fn rocks.mygiftlist.migrate/migrate}
48+
:depstar {:extra-deps {seancorfield/depstar {:mvn/version "2.0.161"}}
49+
:ns-default hf.depstar
50+
:exec-args {}}
51+
:outdated {:extra-deps {olical/depot {:mvn/version "2.0.1"}}
3752
:main-opts ["-m" "depot.outdated.main"]}}}

docker-compose.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: "3.7"
22
services:
33
postgres:
4-
image: postgres:12.2
4+
image: postgres:13.1
55
restart: always
66
environment:
77
POSTGRES_PASSWORD: password

migrate/rocks/mygiftlist/migrate.clj

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
(ns rocks.mygiftlist.migrate
2+
(:require [clojure.string :as str])
3+
(:import [java.net URI]
4+
[org.flywaydb.core Flyway]
5+
[org.flywaydb.core.api Location]))
6+
7+
(defn database-url->datasource-args [database-url]
8+
(let [{:keys [userInfo host port path]} (bean (URI. database-url))
9+
[username password] (str/split userInfo #":")]
10+
{:jdbc-url (str "jdbc:postgresql://" host ":" port path)
11+
:username username
12+
:password password}))
13+
14+
(defn migrate [{:keys [database-url]}]
15+
(let [{:keys [jdbc-url username password]}
16+
(database-url->datasource-args
17+
(or database-url (System/getenv "DATABASE_URL")))]
18+
(.. (Flyway/configure)
19+
(dataSource jdbc-url username password)
20+
(locations (into-array Location
21+
[(Location. "filesystem:./migrations")]))
22+
(load)
23+
(migrate))))

0 commit comments

Comments
 (0)