+++ /dev/null
-(ns utils
- (:require [clojure.string :as str]
- [clojure.java.io :as io]
- [cheshire.core :as json]
- [org.httpkit.client :as http]
- [lib :refer [download-binary run-cmd]]))
-
-(defn git-pull-rebase-branch
- "Do git pull and rebase branch with master"
- []
- (let [current-branch (str/trim (run-cmd ["git" "branch" "--show-current"]))]
- (print (run-cmd ["git" "pull" "--rebase"]))
- (when (not (contains? #{"master" "main"} current-branch))
- (run! print
- (map run-cmd
- '[["git" "checkout" "master"] ["git" "pull" "--rebase"]
- ["git" "checkout" "-"] ["git" "rebase" "master"]])))))
-
-(defn run-seq
- "Run a sequence of shell commands on a sequence of arguments.
-
- Examples:
-
- 1. Play and delete each video from a folder
- ls | bb -i '(run-seq [\"mpv\" \"rm\"] *input*)'
- "
- [commands arguments]
- (doseq [argument arguments
- command commands]
- (println (run-cmd [command argument]))))
-
-(defn install-deb
- "Install a Debian package given a direct URL to the .deb file."
- [url]
- (println "Downloading deb package...")
- (download-binary url "package.deb")
- (println "Installing...")
- (println (run-cmd ["sudo" "apt" "install" "./package.deb"]))
- (println "Cleaning up..")
- (io/delete-file "package.deb")
- (println "Done."))
-
-(defn install-deb-from-GitHub
- "Install a Debian package given a GitHub URL."
- [url]
-
- (assert (.contains url "github.com"))
-
- (letfn [(extract-GitHub-author-project
- ;; Extracts a string like author/project from URL.
- [url]
- (str/join "/" (subvec (str/split url #"/") 3)))
- (make-api-url ;; just some string interpolation
- [author-project]
- (str "https://api.github.com/repos/"
- author-project
- "/releases/latest"))
- (get-assets ;; Download list of assets from GitHub
- [api-url]
- (:assets (json/parse-string
- (:body @(http/get api-url)) true)))
- (find-url-to-deb ;; Find Debian package URL from assets
- [assets]
- (some #(if (str/ends-with? % "deb") %)
- (map #(:browser_download_url %) assets)))]
-
- (let [author-project (extract-GitHub-author-project url)
- api-url (make-api-url author-project)
- assets (get-assets api-url)
- deb-url (find-url-to-deb assets)]
- ;; Download and install Debian package
- (install-deb deb-url))))