From 698b178cd4dcc0444efbb5706aad090140026e5f Mon Sep 17 00:00:00 2001 From: Wes Morgan Date: Tue, 30 Jun 2026 10:51:52 -0600 Subject: [PATCH 1/3] Replace cljfmt CI check with bb fmt-check task MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …and add a fmt-fix task too --- .github/workflows/ci.yml | 6 +++--- bb.edn | 10 ++++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5ad60bd9..b6beaddf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,10 +25,10 @@ jobs: runs-on: ubuntu-latest steps: - - name: Install cljfmt + - name: Install babashka uses: DeLaGuardo/setup-clojure@13.4 with: - cljfmt: latest + bb: 1.12.217 - uses: actions/checkout@v4 - name: Check formatting - run: cljfmt check src test bb.edn deps.edn tests.edn + run: bb fmt-check diff --git a/bb.edn b/bb.edn index bd92e6c0..7173c7cf 100644 --- a/bb.edn +++ b/bb.edn @@ -1,12 +1,18 @@ {:paths ["src"] :deps {local/deps {:local/root "."} + dev.weavejester/cljfmt {:mvn/version "0.16.4"} org.babashka/spec.alpha {:git/url "https://github.com/babashka/spec.alpha" :git/sha "b6eb0f2208ab036c0a5d0e7235cb0b09d2feabb7"}} :tasks - {:requires ([docker-clojure.core :as dc]) + {:requires ([cljfmt.tool :as fmt] + [docker-clojure.core :as dc]) clean (dc/-main "clean") dockerfiles {:depends [clean] :task (apply dc/-main "dockerfiles" *command-line-args*)} manifest (apply dc/-main "manifest" *command-line-args*) build-images {:task (apply dc/-main "build-images" *command-line-args*)} - test (clojure '-X:test)}} + test (clojure '-X:test) + fmt-check {:doc "Check formatting with cljfmt" + :task (fmt/check {:paths ["src" "test" "bb.edn" "deps.edn" "tests.edn"]})} + fmt-fix {:doc "Fix formatting with cljfmt" + :task (fmt/fix {:paths ["src" "test" "bb.edn" "deps.edn" "tests.edn"]})}}} From 0cff2c4270f614736ae3755c5136143c84988fb2 Mon Sep 17 00:00:00 2001 From: Wes Morgan Date: Tue, 30 Jun 2026 11:08:43 -0600 Subject: [PATCH 2/3] Migrate CLI to babashka.cli --- deps.edn | 1 + src/docker_clojure/core.clj | 123 ++++++++++++++++++++++-------------- 2 files changed, 77 insertions(+), 47 deletions(-) diff --git a/deps.edn b/deps.edn index 7f5a1834..0822dbe2 100644 --- a/deps.edn +++ b/deps.edn @@ -2,6 +2,7 @@ {org.clojure/clojure {:mvn/version "1.12.4"} org.clojure/math.combinatorics {:mvn/version "0.3.2"} org.clojure/core.async {:mvn/version "1.9.865"} + org.babashka/cli {:mvn/version "0.12.75"} selmer/selmer {:mvn/version "1.12.61"} com.gfredericks/test.chuck {:git/url "https://github.com/gfredericks/test.chuck" :git/sha "ab5c11b013d3526e587dd53a860fa651b3e8a5a7"}} diff --git a/src/docker_clojure/core.clj b/src/docker_clojure/core.clj index 4e734f1f..77837702 100644 --- a/src/docker_clojure/core.clj +++ b/src/docker_clojure/core.clj @@ -1,18 +1,17 @@ (ns docker-clojure.core - (:require - [clojure.core.async :refer [> ["git" "rev-parse" "HEAD"] (apply sh) :out) - target-file (or (first args) :stdout) manifest (manifest/generate {:maintainers cfg/maintainers :architectures cfg/architectures :git-repo cfg/git-repo} @@ -95,42 +91,75 @@ (.close output-writer))))) (defn generate-variants - [args] - ; TODO: Maybe replace this with bb/cli - (let [key-vals (->> args - (map #(if (str/starts-with? % ":") - (edn/read-string %) - %)) - (map #(try (Integer/parseInt %) - (catch Exception _ %))) - (partition 2)) - variant-filter #(or - (empty? key-vals) + [opts] + (let [variant-filter #(or + (empty? opts) (every? (fn [[k v]] (= (get % k) v)) - key-vals))] - (when (seq key-vals) + opts))] + (when (seq opts) (println "Filtering variants with:") - (doseq [[k v] key-vals] + (doseq [[k v] opts] (println (str "(= " (pr-str v) " (get variant " (pr-str k) "))"))) (println)) (filter variant-filter (valid-variants)))) -(defn run - "Entrypoint for exec-fn." - [{:keys [cmd args parallelization]}] +(defn cmd-clean [{:keys [_opts]}] + (df/clean-all)) + +(defn cmd-dockerfiles [{:keys [opts]}] + (generate-dockerfiles! cfg/installer-hashes (generate-variants opts))) + +(defn cmd-manifest [{:keys [opts]}] + (let [target-file (or (:output-file opts) :stdout) + filter-opts (dissoc opts :output-file)] + (generate-manifest! (generate-variants filter-opts) target-file))) + +(defn cmd-build-images [{:keys [opts]}] + (let [parallelism (:parallelism opts) + filter-opts (dissoc opts :parallelism)] + (build-images (or parallelism 4) cfg/installer-hashes (generate-variants filter-opts)))) + +(def cmd-table + [{:cmds ["clean"] + :fn cmd-clean + :doc "Clean all generated Dockerfiles"} + {:cmds ["dockerfiles"] + :fn cmd-dockerfiles + :doc "Generate Dockerfiles for matching variants"} + {:cmds ["manifest"] + :fn cmd-manifest + :doc "Generate manifest for matching variants" + :args->opts [:output-file] + :spec {:output-file {:desc "Output file (default: stdout)"}}} + {:cmds ["build-images"] + :fn cmd-build-images + :doc "Build Docker images for matching variants" + :spec {:parallelism {:alias :p + :coerce :long + :desc "Number of parallel builds" + :default 4 + :validate pos?}}}]) + +(defn -main + "Entrypoint for CLI." + [& args] (logger/start) - (let [variants (generate-variants args)] - (case cmd - :clean (df/clean-all) - :dockerfiles (generate-dockerfiles! cfg/installer-hashes variants) - :manifest (generate-manifest! variants args) - :build-images (build-images parallelization cfg/installer-hashes variants))) + (cli/dispatch cmd-table args {:prog "docker-clojure" :help true}) (logger/stop)) -(defn -main - [& cmd-args] - (let [[cmd & args] cmd-args] - (run {:cmd (if cmd (keyword cmd) :build-images) - :args args - :parallelization 4}))) +(defn run + "Entrypoint for exec-fn (preserves compat with deps.edn :exec-fn)." + [m] + (let [cmd (:cmd m) + _parallelization (:parallelization m) + variant-keys (into [] (disj (set (keys m)) :cmd :parallelization)) + opts (select-keys m variant-keys)] + (logger/start) + ((case cmd + :clean cmd-clean + :dockerfiles cmd-dockerfiles + :manifest cmd-manifest + :build-images cmd-build-images) + {:opts opts :args nil}) + (logger/stop))) From 05a985d236fe27219c36c571c8060786f0dc9c6c Mon Sep 17 00:00:00 2001 From: Wes Morgan Date: Tue, 28 Jul 2026 11:12:13 -0600 Subject: [PATCH 3/3] Remove unused core/run entrypoint and deps.edn build-images alias The exec-fn based entrypoint was dead code left over from before the babashka.cli migration: bb.edn's build-images task already calls -main directly, and nothing else referenced clojure -X:build-images. It also silently dropped the :parallelization exec-arg, which never reached cmd-build-images's :parallelism option. Addresses review feedback on PR #291. --- deps.edn | 16 ++++++---------- src/docker_clojure/core.clj | 16 ---------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/deps.edn b/deps.edn index 0822dbe2..0788d52e 100644 --- a/deps.edn +++ b/deps.edn @@ -10,13 +10,9 @@ :paths ["src" "resources"] :aliases - {:build-images {:exec-fn docker-clojure.core/run - :exec-args {:cmd :build-images - :parallelization 2}} - - :test {:extra-paths ["test"] - :extra-deps {lambdaisland/kaocha {:mvn/version "1.91.1392"} - orchestra/orchestra {:mvn/version "2021.01.01-1"} - org.clojure/test.check {:mvn/version "1.1.3"}} - :exec-fn docker-clojure.fix-kaocha/run-tests - :exec-args {}}}} + {:test {:extra-paths ["test"] + :extra-deps {lambdaisland/kaocha {:mvn/version "1.91.1392"} + orchestra/orchestra {:mvn/version "2021.01.01-1"} + org.clojure/test.check {:mvn/version "1.1.3"}} + :exec-fn docker-clojure.fix-kaocha/run-tests + :exec-args {}}}} diff --git a/src/docker_clojure/core.clj b/src/docker_clojure/core.clj index 77837702..9dc7a44a 100644 --- a/src/docker_clojure/core.clj +++ b/src/docker_clojure/core.clj @@ -147,19 +147,3 @@ (logger/start) (cli/dispatch cmd-table args {:prog "docker-clojure" :help true}) (logger/stop)) - -(defn run - "Entrypoint for exec-fn (preserves compat with deps.edn :exec-fn)." - [m] - (let [cmd (:cmd m) - _parallelization (:parallelization m) - variant-keys (into [] (disj (set (keys m)) :cmd :parallelization)) - opts (select-keys m variant-keys)] - (logger/start) - ((case cmd - :clean cmd-clean - :dockerfiles cmd-dockerfiles - :manifest cmd-manifest - :build-images cmd-build-images) - {:opts opts :args nil}) - (logger/stop)))