babashka/.circleci/script/short.clj

42 lines
1.1 KiB
Clojure

(require '[babashka.process :as proc]
'[clojure.string :as str])
(def config
{:skip-if-only [#".*.md$"]})
(defn exec [cmd]
(-> cmd
(proc/process)
(proc/check)))
(defn get-changes []
(-> "git diff --name-only HEAD~1"
(exec)
(:out)
slurp
(str/split-lines)))
(defn irrelevant-change? [change regexes]
(some? (some #(re-matches % change) regexes)))
(defn relevant? [change-set regexes]
(some? (some #(not (irrelevant-change? % regexes)) change-set)))
(defn main []
(let [{:keys [skip-if-only]} config
changed-files (get-changes)]
(if (relevant? changed-files skip-if-only)
(println "Proceeding with CI run")
(do
(println "Irrelevant changes - skipping CI run")
(exec "circleci task halt")))))
(when (= *file* (System/getProperty "babashka.file"))
(main))
(comment
(def regexes [#".*.md$"
#".*.clj"]) ;ignore clojure files
(irrelevant-change? "src/file.png" regexes)
(re-matches #".*.clj$" "src/file.clj.dfff")
(relevant? ["src/file.clj"] regexes))