]> njoseph.me Git - babashka-scripts.git/blobdiff - scripts/lib.clj
Shift from standalone scripts to babashka tasks
[babashka-scripts.git] / scripts / lib.clj
diff --git a/scripts/lib.clj b/scripts/lib.clj
new file mode 100644 (file)
index 0000000..d0f3b40
--- /dev/null
@@ -0,0 +1,62 @@
+; Common utility functions used by scripts
+; Unlike the functions in utils.clj, these are not directly useful
+
+(ns lib
+  (:require [babashka.process :as p]
+            [org.httpkit.client :as http]
+            [clojure.java.io :as io]
+            [clojure.string :as str])
+  (:import [java.nio.file Files FileSystems CopyOption StandardCopyOption]))
+
+(defn run-cmd
+  [command]
+  (->> command
+       p/process
+       :out
+       slurp))
+
+(defn extract-file-from-zip
+  [zip-file-name source destination]
+  (let [zip-file (io/file zip-file-name)
+        dest (io/file destination)
+        fs (FileSystems/newFileSystem (.toPath zip-file) nil)
+        file-in-zip (.getPath fs source (into-array String []))]
+    (Files/copy file-in-zip
+                (.toPath dest)
+                (into-array CopyOption [StandardCopyOption/REPLACE_EXISTING]))))
+
+(defn expand-home
+  [s]
+  (if (.startsWith s "~")
+    (str/replace-first s "~" (System/getProperty "user.home"))
+    s))
+
+(defn download-binary
+  [url destination]
+  (io/copy (:body @(http/get url)) (io/file destination)))
+
+(defn unixify
+  "Make a function `f` behave like a UNIX shell command.
+
+  Examples:
+
+  # Multiple arguments
+  $ install-deb url1 url2 url3
+
+  # Read from file with one url on each line
+  $ install-deb `cat urls.txt`
+
+  # Piping from another process
+  $ ls | install-deb  # Note: install-deb doesn't work with ls
+  "
+  [f]
+  (when (= *file* (System/getProperty "babashka.file"))
+    (if (> (.available System/in) 0)
+      (->> (slurp *in*)
+           (str/split-lines)
+           (filter seq)
+           (run! f))
+      (->> (vec *command-line-args*)
+           (map #(str/split % #" "))
+           (flatten)
+           (run! f)))))