Files
ajet-chat/build.clj
2026-02-17 17:30:45 -05:00

54 lines
1.9 KiB
Clojure

(ns build
"tools.build configuration for building uberjars for each service."
(:require [clojure.tools.build.api :as b]))
(def version "0.1.0")
(defn- module-config [module]
(let [class-dir (str module "/target/classes")
basis (b/create-basis {:aliases [(keyword module)]})]
{:module module
:class-dir class-dir
:uber-file (str module "/target/" module ".jar")
:basis basis
:main (symbol (str "ajet.chat."
(case module
"api" "api.core"
"auth-gw" "auth-gw.core"
"web-sm" "web.core"
"tui-sm" "tui-sm.core"
"cli" "cli.core")))}))
(defn uber
"Build an uberjar for a service module.
Usage: clj -T:build uber :module api
clj -T:build uber :module auth-gw"
[{:keys [module]}]
(let [{:keys [class-dir uber-file basis main]} (module-config (name module))]
(println "Building uberjar for" (name module) "...")
(b/delete {:path class-dir})
(b/copy-dir {:src-dirs ["shared/src" "shared/resources"
(str (name module) "/src")
(str (name module) "/resources")]
:target-dir class-dir})
(b/compile-clj {:basis basis
:src-dirs ["shared/src" (str (name module) "/src")]
:class-dir class-dir})
(b/uber {:class-dir class-dir
:uber-file uber-file
:basis basis
:main main})
(println "Built:" uber-file)))
(defn clean
"Clean build artifacts for a module."
[{:keys [module]}]
(b/delete {:path (str (name module) "/target")}))
(defn clean-all
"Clean all build artifacts."
[_]
(doseq [m ["api" "auth-gw" "web-sm" "tui-sm" "cli"]]
(b/delete {:path (str m "/target")})))