diff --git a/.bashrc b/.bashrc new file mode 100644 index 0000000..78d3fe8 --- /dev/null +++ b/.bashrc @@ -0,0 +1,5 @@ +_bb_tasks() { + COMPREPLY=( $(compgen -W "$(bb tasks |tail -n +3 |cut -f1 -d ' ')" -- ${COMP_WORDS[COMP_CWORD]}) ); +} +# autocomplete filenames as well +complete -f -F _bb_tasks bb \ No newline at end of file diff --git a/bb.edn b/bb.edn index b8431f8..510e36f 100644 --- a/bb.edn +++ b/bb.edn @@ -1,5 +1,5 @@ {:deps {dda/dda-devops-build {:local/root "."}} :tasks - {:requires ([dda.devops-build.main :as main]) - image-build (apply main/build *command-line-args*)}} + {:requires ([dda.devops-build.image :as image]) + image-build (image/dbuild {:name "myimage"})}} diff --git a/src/main/clj/dda/devops_build/devops.clj b/src/main/clj/dda/devops_build/devops.clj new file mode 100644 index 0000000..9b5f63c --- /dev/null +++ b/src/main/clj/dda/devops_build/devops.clj @@ -0,0 +1,12 @@ +(ns dda.devops-build.devops + (:require [clojure.spec.alpha :as s])) + +(s/def ::name string?) +(s/def ::module string?) +(s/def ::stage string?) +(s/def ::project-root-path string?) +(s/def ::build-dir-name string?) + +(s/def ::devops + (s/keys :req-un [::name] + :opt-un [::module ::stage ::project-root-path ::build-dir-name])) \ No newline at end of file diff --git a/src/main/clj/dda/devops_build/image.clj b/src/main/clj/dda/devops_build/image.clj new file mode 100644 index 0000000..720bc18 --- /dev/null +++ b/src/main/clj/dda/devops_build/image.clj @@ -0,0 +1,28 @@ +(ns dda.devops-build.image + (:require [clojure.spec.alpha :as s] + [babashka.process :as p] + [babashka.tasks :as t] + [orchestra.core :refer [defn-spec]] + [dda.devops-build.devops :as d])) + +(s/def ::options (s/* #{"-h"})) +(s/def ::cmd-args (s/cat :options ::options + :args any?)) + +(defn invalid-args-msg + [spec args] + (s/explain spec args) + (println (str "Bad commandline arguments\n"))) + +(defn-spec + dbuild any? + [devops ::d/devops] + (let [{:keys [name]} devops] + (t/shell "echo 'docker" "build" "-t" name "--file" "{path}/image/Dockerfile" "{path}/image"))) + +(defn drun [& cmd-args] + (let [parsed-args-cmd (s/conform ::cmd-args cmd-args)] + (if (= ::s/invalid parsed-args-cmd) + (invalid-args-msg ::cmd-args cmd-args) + (-> (p/process "docker run" "-it" "{name}" "/bin/bash") + (p/check))))) \ No newline at end of file diff --git a/src/main/clj/dda/devops_build/main.clj b/src/main/clj/dda/devops_build/main.clj deleted file mode 100644 index 25e3071..0000000 --- a/src/main/clj/dda/devops_build/main.clj +++ /dev/null @@ -1,17 +0,0 @@ -(ns dda.devops-build.main) -(require '[clojure.spec.alpha :as s]) - -(s/def ::options (s/* #{"-h"})) -(s/def ::cmd-args (s/cat :options ::options - :args any?)) - -(defn invalid-args-msg - [spec args] - (s/explain spec args) - (println (str "Bad commandline arguments\n"))) - -(defn build [& cmd-args] - (let [parsed-args-cmd (s/conform ::cmd-args cmd-args)] - (if (= ::s/invalid parsed-args-cmd) - (invalid-args-msg ::cmd-args cmd-args) - (println parsed-args-cmd)))) \ No newline at end of file