-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathbb.edn
134 lines (116 loc) · 7.85 KB
/
bb.edn
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
{:min-bb-version "0.3.7"
:paths ["script" "build"]
:deps {lread/status-line {:git/url "https://github.com/lread/status-line.git"
:sha "cf44c15f30ea3867227fa61ceb823e5e942c707f"}
dev.nubank/docopt {:mvn/version "0.6.1-fix7"}
version-clj/version-clj {:mvn/version "2.0.3"}
etaoin/etaoin {:mvn/version "1.1.42"}
io.github.babashka/neil {:git/tag "v0.3.68" :git/sha "78ffab1"}}
:tasks {;; setup
:requires ([babashka.fs :as fs]
[clojure.string :as string]
[helper.main :as main]
[lread.status-line :as status])
:init (do
(defn no-args-check []
(main/doc-arg-opt *command-line-args*))
(defn requested-clojure-version
([] (requested-clojure-version ["1.9" "1.10" "1.11" "1.12"]))
([allowed-versions]
(let [args-usage (string/join "\n"
["Valid args: [options]"
""
"Options:"
(format " -v, --clojure-version VERSION Test with Clojure %s [default: 1.11]"
(-> allowed-versions vec pr-str (string/replace "\"" "")))
" --help Show this help"])]
(when-let [opts (main/doc-arg-opt args-usage *command-line-args*)]
(let [clojure-version (get opts "--clojure-version")]
(if (not (some #{clojure-version} allowed-versions))
(status/die 1 args-usage)
clojure-version))))))
(defn run-under [clojure-versions task-sym]
(doseq [clojure-version clojure-versions] ;; kaocha min versio is 1.9
(binding [*command-line-args* ["--clojure-version" clojure-version]]
(run task-sym)))))
:enter (let [{:keys [name accepts-args?]} (current-task)]
(when-not (string/starts-with? name "-")
(status/line :head "TASK %s %s" name (string/join " " *command-line-args*))))
:leave (let [{:keys [name]} (current-task)]
(when-not (string/starts-with? name "-")
(status/line :detail "\nTASK %s done." name)))
;; commands
download-deps {:doc "bring down Clojure deps"
:task (clojure "-T:build download-deps")}
lint {:doc "[--rebuild] lint source code with clj-kondo"
:task lint/-main}
clean {:doc "delete generated/cached build work"
:task clean/-main}
test-unit {:doc "test-doc-block units tests under Clojure"
:task (when-let [clojure-version (requested-clojure-version)]
(status/line :detail "Testing with clojure v%s" clojure-version)
(clojure (format "-M:kaocha:%s unit" clojure-version)))}
gen {:doc "generate tests from sample docs"
:task (when-let [clojure-version (requested-clojure-version)]
(let [target "target/test-doc-blocks"
success-marker (fs/file target "SUCCESS")
regen-reason (if (not (fs/exists? success-marker))
"a previous successful gen result not found"
(let [newer-thans (fs/modified-since target
(concat
(fs/glob "doc" "**.{adoc,md,cljc}")
(fs/glob "src" "**/*.*")))]
(when (seq newer-thans)
(str "found files newer than last gen: " (mapv str newer-thans)))))]
(if regen-reason
(do
(fs/delete-if-exists success-marker)
(status/line :detail "Generating tests: %s" regen-reason)
(status/line :detail "using clojure v%s" clojure-version)
(clojure (format "-X:test-doc-blocks:test-opts:%s gen-tests" clojure-version))
(spit success-marker "SUCCESS"))
(status/line :detail "Tests already successfully generated - run a \"bb clean\" to force regen"))))}
-gen-1.11 (run-under ["1.11"] 'gen)
gen-to-expected {:doc "generate tests from sample docs to the expected result"
:task (clojure "-X:test-doc-blocks:test-opts:regen-opts gen-tests")}
test-gen-kaocha {:doc "use kaocha to run generated tests"
:task (when-let [clojure-version (requested-clojure-version)]
(run '-gen-1.11)
(status/line :detail "Testing with clojure v%s" clojure-version)
(clojure (format "-M:isolated/kaocha:%s generated" clojure-version)))}
test-gen-clj {:doc "use Clojure test-runner to run generated tests"
:task (when-let [clojure-version (requested-clojure-version ["1.8" "1.9" "1.10" "1.11" "1.12"])]
(run '-gen-1.11)
(status/line :detail "Testing with clojure v%s" clojure-version)
(clojure (format "-M:isolated/clj-test-runner:%s" clojure-version)))}
test-gen-cljs {:doc "use cljs-test-runner to run generated tests"
:task (do
(run '-gen-1.11)
(clojure "-M:isolated/cljs-test-runner"))}
test-gen-all {:doc "run generated tests under all platforms"
:depends [test-gen-kaocha test-gen-clj test-gen-cljs]}
test-integration {:doc "verify that generated tests match last verified run"
:task (when-let [clojure-version (requested-clojure-version)]
(status/line :detail "Verifying under clojure v%s" clojure-version)
(clojure (format "-M:kaocha:%s integration" clojure-version)))}
outdated {:doc "report on outdated Clojure dependencies"
:task outdated/-main}
doc-update-readme {:doc "honour our contributors in README"
:task doc-update-readme/-main}
cljdoc-preview {:doc "preview what docs will look like on cljdoc, use --help for args"
:task cljdoc-preview/-main}
;; let's not rely on a random version of neil
neil {:task babashka.neil/-main :doc "Pinned version of babashka/neil (used in scripting)"}
ci-test {:doc "run continuous integration service tests"
:task (when (no-args-check)
(run 'clean)
(run 'lint)
(run-under ["1.11" "1.12"] 'test-unit)
(run-under ["1.11" "1.12"] 'test-integration)
(run 'gen)
(run-under ["1.9" "1.10" "1.11" "1.12"] 'test-gen-kaocha) ;; kaocha min version is 1.9
(run-under ["1.8" "1.9" "1.10" "1.11" "1.12"] 'test-gen-clj) ;; also include 1.8
(run 'test-gen-cljs))}
ci-release {:doc "release task, use --help for args"
:requires [ci-release]
:task ci-release/-main}}}