(ns dev.liquibase (:require [clojure.string :as str] [colorize.core :as colorize] [metabase.db] [metabase.db.data-source] [metabase.db.env :as mdb.env])) | |
(set! *warn-on-reflection* true) | |
(comment metabase.db.data-source/keep-me) | |
Use the Liquibase CLI with | (defn -main [& args] (let [args (if (empty? args) ["help"] args) args (into ["--changeLogFile=resources/liquibase_legacy.yaml"] (comp cat (filter seq)) (let [^metabase.db.data_source.DataSource data-source mdb.env/data-source ^java.util.Properties properties (.properties data-source)] [(when-let [user (some-> properties (.get "user"))] ["--username" user]) (when-let [password (some-> properties (.get "password"))] ["--password" password]) ["--url" (.url data-source)] (map str args)]))] ;; when generating documentation we need to set up the DB and run migrations. (when (= (first args) "dbDoc") (metabase.db/setup-db! {:create-sample-content? false})) (println (colorize/green (str/join " " (cons "liquibase" (map pr-str args))))) ;; use reflection here instead of static method calls because `liquibase.integration.commandline.Main` fails to load ;; without having the `logback` dependency available. We add this as `:extra-deps` for the `:liquibase` profile. We ;; don't want other stuff like the linters to choke here tho. (let [klass (Class/forName "liquibase.integration.commandline.Main") method (.getMethod klass "main" (into-array Class [(Class/forName "[Ljava.lang.String;")]))] (.invoke method klass ^"[Ljava.lang.Object" (into-array Object [(into-array String args)]))))) |