|
2 | 2 | (:require |
3 | 3 | [borkdude.gh-release-artifact :as gh] |
4 | 4 | [clojure.tools.build.api :as b] |
5 | | - [deps-deploy.deps-deploy :as dd])) |
| 5 | + [deps-deploy.deps-deploy :as dd]) |
| 6 | + (:import |
| 7 | + [java.nio.file Paths] |
| 8 | + [com.google.cloud.tools.jib.api Jib Containerizer RegistryImage TarImage] |
| 9 | + [com.google.cloud.tools.jib.api.buildplan AbsoluteUnixPath Port])) |
6 | 10 |
|
7 | 11 | (def lib 'io.replikativ/datahike-server) |
8 | 12 | (def version (format "0.1.%s" (b/git-count-revs nil))) |
9 | 13 | (def current-commit (gh/current-commit)) |
10 | 14 | (def class-dir "target/classes") |
11 | 15 | (def basis (b/create-basis {:project "deps.edn"})) |
12 | | -(def jar-file (format "target/%s-%s.jar" (name lib) version)) |
13 | | -(def uber-file (format "target/%s-%s-standalone.jar" (name lib) version)) |
| 16 | +(def jar-path (format "target/%s-%s.jar" (name lib) version)) |
| 17 | +(def uber-file (format "%s-%s-standalone.jar" (name lib) version)) |
| 18 | +(def uber-path (format "target/%s" uber-file)) |
| 19 | +(def image (format "docker.io/replikativ/datahike-server:%s" version)) |
| 20 | + |
| 21 | +(defn get-version |
| 22 | + [_] |
| 23 | + (println version)) |
14 | 24 |
|
15 | 25 | (defn clean |
16 | 26 | [_] |
|
35 | 45 | (b/copy-dir {:src-dirs ["src" "resources"] |
36 | 46 | :target-dir class-dir}) |
37 | 47 | (b/jar {:class-dir class-dir |
38 | | - :jar-file jar-file})) |
| 48 | + :jar-file jar-path})) |
39 | 49 |
|
40 | 50 | (defn uber |
41 | 51 | [_] |
|
46 | 56 | :src-dirs ["src"] |
47 | 57 | :class-dir class-dir}) |
48 | 58 | (b/uber {:class-dir class-dir |
49 | | - :uber-file uber-file |
| 59 | + :uber-file uber-path |
50 | 60 | :basis basis |
51 | 61 | :main 'datahike-server.core})) |
52 | 62 |
|
53 | 63 | (defn deploy |
54 | 64 | "Don't forget to set CLOJARS_USERNAME and CLOJARS_PASSWORD env vars." |
55 | 65 | [_] |
56 | | - (dd/deploy {:installer :remote :artifact jar-file |
| 66 | + (dd/deploy {:installer :remote :artifact jar-path |
57 | 67 | :pom-file (b/pom-path {:lib lib :class-dir class-dir})})) |
58 | 68 |
|
59 | 69 | (defn release |
|
62 | 72 | :repo (name lib) |
63 | 73 | :tag version |
64 | 74 | :commit current-commit |
65 | | - :file jar-file |
| 75 | + :file uber-path |
66 | 76 | :content-type "application/java-archive"}) |
67 | 77 | :url |
68 | 78 | println)) |
|
74 | 84 | (b/install {:basis (b/create-basis {}) |
75 | 85 | :lib lib |
76 | 86 | :version version |
77 | | - :jar-file jar-file |
| 87 | + :jar-file jar-path |
78 | 88 | :class-dir class-dir})) |
79 | 89 |
|
| 90 | +(defn deploy-image |
| 91 | + [{:keys [docker-login docker-password]}] |
| 92 | + (if-not (and docker-login docker-password) |
| 93 | + (println "Docker credentials missing.") |
| 94 | + (.containerize |
| 95 | + (-> (Jib/from "gcr.io/distroless/java17-debian11") |
| 96 | + (.addLayer [(Paths/get uber-path (into-array String[]))] (AbsoluteUnixPath/get "/")) |
| 97 | + (.setProgramArguments [(format "/%s" uber-file)]) |
| 98 | + (.addExposedPort (Port/tcp 3000))) |
| 99 | + (Containerizer/to |
| 100 | + (-> (RegistryImage/named image) |
| 101 | + (.addCredential (str docker-login) (str docker-password)))))) |
| 102 | + (println "Deployed new image to Docker Hub: " image)) |
| 103 | + |
80 | 104 | (comment |
| 105 | + (def docker-login "") |
| 106 | + (def docker-password "") |
| 107 | + |
81 | 108 | (b/pom-path {:lib lib :class-dir class-dir}) |
82 | 109 | (clean nil) |
83 | 110 | (compile nil) |
84 | 111 | (jar nil) |
| 112 | + (uber nil) |
| 113 | + (deploy-image {:docker-login docker-login |
| 114 | + :docker-password docker-password}) |
85 | 115 | (deploy nil) |
86 | 116 | (release nil) |
87 | | - (install nil) |
88 | | - |
89 | | - (name lib) |
90 | | - (namespace lib) |
91 | | - (require '[babashka.fs :as fs]) |
92 | | - (fs/file-name (format "target/datahike-%s.jar" version))) |
| 117 | + (install nil)) |
0 commit comments