(ns dda.build.devops (:require [clojure.spec.alpha :as s] [orchestra.core :refer [defn-spec]] [dda.build.devops.domain :as domain] [dda.build.infrastructure :as i])) (s/def ::devops (s/keys :req-un [::domain/name] :opt-un [::domain/module ::domain/stage ::domain/project-root-path ::domain/build-dir-name ::domain/debug ::domain/dry-run])) (def default {:name "dda-backup" :project-root-path "." :build-dir-name "target" :stage "dev" :debug false :dry-run false}) (defn-spec env-or-file string? [name string?] (let [from-env (System/getenv name) name-from-file (System/getenv (str name "_FILE"))] (cond (some? from-env) from-env (some? name-from-file) (slurp name-from-file) :else (throw (RuntimeException. (str "Environment: [" name "," name-from-file "] was missing.")))))) (defn-spec clean-build-dir! nil? [devops ::devops] (let [final (merge default devops)] (i/execute! (domain/clean-build-dir-command final) final))) (defn-spec create-build-dir! nil? [devops ::devops] (let [final (merge default devops)] (i/execute! (domain/create-build-dir-command final) final)))