Built from main at 1d902a0 on 2026-11-14

Clojure

Recognised by .clj, .cljs and .cljc sources and by the build files: deps.edn (the Clojure CLI), project.clj (Leiningen), bb.edn (Babashka) and shadow-cljs.edn; once the project is known to be Clojure, Babashka .bb scripts are Clojure too, and EDN data files belong to the ecosystem with no language of their own. .cpcache, target beside a build file and .shadow-cljs are build trees.

The Clojure CLI runs aliases (clojure -M:test, -X:test, -T:build test): a tool is known by its alias's name when CI runs it that way (:test, :kaocha, :cloverage, :cljfmt, :nvd), and by its program when run directly.

tests-run

deftest (clojure.test), defspec or speclj describe under test/ or spec/ (or *_test.clj, *_spec.clj), run by clojure -M:test (an alias named for the tests, kaocha or coverage), lein test, lein kaocha, kaocha, bb test, or shadow-cljs compile test.

coverage

cloverage counts the forms (and lines) the tests run, the finest Clojure has: lein cloverage, or the CLI alias that runs it (clojure -M:coverage).

platform-matrix

Clojure runs on the JDK: the toolchains are the JDK versions the JVM profile recognises (actions/setup-java's java-version, a temurin: image); the Clojure version is the dependency deps.edn names, not a CI toolchain.

compiler-warnings

clj-kondo's lints stand in for compiler warnings: clj-kondo --lint src test (or lein clj-kondo, clojure -M:clj-kondo) runs in CI, and *warn-on-reflection* is set (:global-vars in project.clj, or (set! *warn-on-reflection* true) in the namespaces), the one warning the compiler has. Installing clj-kondo (setup-clojure's clj-kondo: input) is not running it.

warnings-as-errors

clj-kondo exits non-zero on a warning by default; --fail-level error turns that off, so a run without it counts.

code-formatting

cljfmt (cljfmt check fails, cljfmt fix rewrites; lein cljfmt check, clojure -M:cljfmt check), cljstyle (check/fix) or zprint (--check/--write); each has a default style, with .cljfmt.edn, .cljstyle or .zprintrc picking another.

static-analysis

clj-kondo, with the linters .clj-kondo/config.edn sets (its defaults without).

security-scanning

semgrep, which reads Clojure; CodeQL and GitLab SAST do not.

dependency-audit

nvd-clojure (clojure -M:nvd, lein nvd check) or clj-watson.

committed-artifacts

.cpcache/ (the CLI), target/ (Leiningen and tools.build), .shadow-cljs/, and the REPL's .nrepl-port.

vcs-ignore

The same, each of those the project's build systems write; .nrepl-port for every project.

Not judged

Clojure is dynamically typed (type-checking); lizard does not parse it (function-limits); deps.edn and project.clj pin every version and have no lock file (dependency-management); no fuzzer or mutation testing tool the validator knows runs Clojure tests; the JVM builds no debug or release configuration (ci-build-types, hardening, cxx-extensions).