#! /usr/bin/env bb (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))