-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.clj
59 lines (50 loc) · 1.85 KB
/
build.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
;; Run this script with "clj -T:build uber"
(ns build
(:require [babashka.fs :as fs]
[clojure.tools.build.api :as b]))
(def lib 'com.github.schmir/prune-backups)
(def git-branch (b/git-process {:git-args "branch --show-current"}))
(def version
(str (if (= git-branch "main") nil (str git-branch "-")) "v0.1." (b/git-count-revs nil)))
(def class-dir "target/classes")
(def meta-clj (format "%s/prune_backups/meta.clj" class-dir))
(def basis (b/create-basis {:project "deps.edn"}))
(def uber-file (format "target/%s.jar" (name lib)))
(def uberscript-file (format "target/%s" (name lib)))
(let [d (delay (b/delete {:path "target"}))] (defn clean [_] @d))
(defn meta-ns
[]
(str "(ns prune-backups.meta)" \newline "(def version " (pr-str version) ")" \newline \newline))
(defn uber
[_]
(clean nil)
(b/copy-dir {:src-dirs ["src" "resources"], :target-dir class-dir})
(spit meta-clj (meta-ns))
(b/compile-clj {:basis basis, :ns-compile '[prune-backups.cli], :class-dir class-dir})
(b/uber {:class-dir class-dir, :uber-file uber-file, :basis basis, :main 'prune-backups.cli}))
(defn read-source
[]
(apply str
(->> ["proto.clj" "rotate.clj" "tarsnap.clj" "zfs.clj" "cli.clj"]
(map (fn [s]
(str ";; --- " s \newline (slurp (str "src/prune_backups/" s)) \newline))))))
(defn prelude
[]
(str "#!/usr/bin/env bb"
\newline
";; -*- mode: clojure -*-"
\newline
";; prune-backups "
version
\newline
";;" \newline
";; DO NOT EDIT THIS FILE" \newline
";;" \newline
"" \newline))
(defn uberscript
[_]
(clean nil)
(fs/create-dirs "target")
(spit uberscript-file (str (prelude) (meta-ns) (read-source)))
(fs/set-posix-file-permissions uberscript-file "rwxr-xr-x"))
(defn uberall [_] (uber nil) (uberscript nil) (spit "target/VERSION" version))