]> njoseph.me Git - babashka-scripts.git/blobdiff - update-babashka
Remove .clj suffix for scripts
[babashka-scripts.git] / update-babashka
diff --git a/update-babashka b/update-babashka
new file mode 100755 (executable)
index 0000000..bf4bb8e
--- /dev/null
@@ -0,0 +1,55 @@
+#! /usr/bin/env bb
+; -*- mode: clojure -*-
+
+(require '[cheshire.core :as json]
+         '[org.httpkit.client :as http]
+         '[babashka.fs :as fs]
+         '[clojure.java.io :as io]
+         '[lib :refer [download-binary expand-home run-cmd]])
+
+(defn babashka-latest-version
+  []
+  (-> @(http/get "https://api.github.com/repos/babashka/babashka/tags")
+      :body
+      (json/parse-string true)
+      first
+      :name
+      (subs 1)))
+
+(defn get-download-url
+  [version architecture]
+  (str "https://github.com/babashka/babashka/releases/download/v"
+       version
+       "/babashka-"
+       version
+       "-"
+       architecture
+       ".tar.gz"))
+
+(defn check-latest
+  [version]
+  (when (= (System/getProperty "babashka.version") version)
+    (println "Already using the latest version.")
+    (System/exit 0)))
+
+(defn download-latest
+  [version architecture output]
+  (let [url (get-download-url version architecture)]
+    (download-binary url output)))
+
+(defn update-babashka
+  []
+  (let [architecture "linux-amd64"  ;; TODO support other architectures
+        tarball "babashka.tar.gz"
+        destination (expand-home "~/bin")
+        version (babashka-latest-version)]
+    (println (str "Latest version is " version))
+    (check-latest version)
+    (println "Updating...")
+    (download-latest version architecture tarball)
+    (run-cmd ["tar" "-xzf" tarball "--directory" destination])
+    (fs/set-posix-file-permissions (str destination "/bb") "rwxr-xr-x")
+    (io/delete-file tarball)
+    (println "Done!")))
+
+(when (= *file* (System/getProperty "babashka.file")) (update-babashka))