#! /usr/bin/env bb (require '[clojure.java.shell :refer [sh]] '[cheshire.core :as json] '[babashka.curl :as curl] '[babashka.fs :as fs]) (defn babashka-latest-version [] (-> (curl/get "https://api.github.com/repos/babashka/babashka/tags") :body (json/parse-string true) first :name (subs 1))) (defn download-binary [url destination] (io/copy (:body (curl/get url {:as :stream})) (io/file destination))) (defn get-download-url [version architecture] (str "https://github.com/babashka/babashka/releases/download/v" version "/babashka-" version "-" architecture ".zip")) (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)] (println (str "Latest version is " version)) (download-binary url output))) (= *file* (System/getProperty "babashka.file") (let [architecture "linux-static-amd64" ;; TODO support multiple architectures zip-file "babashka.zip" destination (expand-home "~/bin/bb") version (babashka-latest-version)] (check-latest version) (download-latest version architecture zip-file) (extract-file-from-zip zip-file "bb" destination) (fs/set-posix-file-permissions "/home/joseph/bin/bb" "rwxr-xr-x") (io/delete-file zip-file)))