From: Joseph Nuthalapati Date: Fri, 12 Feb 2021 08:15:30 +0000 (+0530) Subject: Add babashka self-updater script X-Git-Url: https://njoseph.me/gitweb/babashka-scripts.git/commitdiff_plain/f1d839f5e616cf6f3b121c3b34a4fd16b2200a8c?hp=f7a7c8852fc7f3a47f858ad4fbf6b177735f52c0 Add babashka self-updater script Also refactored common functions into lib.clj Signed-off-by: Joseph Nuthalapati --- diff --git a/README.md b/README.md new file mode 100644 index 0000000..f02c678 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# Babashka Scripts + +Miscellaneous [babashka](https://babashka.org "babashka website") scripts I wrote for my own personal use. + +## Requirements + +babashka (>= 0.2.9) + +## Usage + +Clone this repository. + +``` sh +cd ~/dev +git clone https://njoseph.me/gitweb/babashka-scripts.git +``` + +Add the following lines to your shell configuration file. + +``` sh +export BABASHKA_PRELOADS='(load-file (str (System/getProperty "user.home") "/dev/babashka-scripts/lib.clj"))' +export PATH=$PATH:$HOME/dev/babashka-scripts +``` + +## Organization + +`lib.clj` contains functions that the other scripts might use. It must be loaded first. diff --git a/ebook-to-audio-book.clj b/ebook-to-audio-book.clj index 8305c2e..c09b8d0 100755 --- a/ebook-to-audio-book.clj +++ b/ebook-to-audio-book.clj @@ -2,8 +2,6 @@ ; A utility to listen to your ebooks using TTS programs -(import '[java.nio.file Files FileSystems CopyOption]) - (require '[babashka.process :as p] '[clojure.java.io :as io] '[clojure.string :refer [split]]) @@ -15,7 +13,6 @@ ;; TODO Use festival-tts or say depending on OS - (defn run-cmd [command] (->> command @@ -23,16 +20,6 @@ :out slurp)) -(defn extract-file-from-zip - [zip-file-name source destination] - (let [zip-file (io/file zip-file-name) - src (io/file source) - 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 [])))) - (let [book-file (first *command-line-args*) title (first (split book-file #"\.")) txtz-file (str title ".txtz") diff --git a/lib.clj b/lib.clj new file mode 100644 index 0000000..86dc702 --- /dev/null +++ b/lib.clj @@ -0,0 +1,18 @@ +; + +(import '[java.nio.file Files FileSystems CopyOption StandardCopyOption]) + +(defn extract-file-from-zip + [zip-file-name source destination] + (let [zip-file (io/file zip-file-name) + src (io/file source) + 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 "~") + (clojure.string/replace-first s "~" (System/getProperty "user.home")) + s)) diff --git a/update-babashka.clj b/update-babashka.clj new file mode 100755 index 0000000..56ece2d --- /dev/null +++ b/update-babashka.clj @@ -0,0 +1,48 @@ +#! /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)))