Created
September 16, 2021 22:35
-
-
Save rutenkolk/dbd970d03a0d012b671db38434ccbfa7 to your computer and use it in GitHub Desktop.
upgrading zig to the latest version with Babashka
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bb | |
(ns script | |
(:require [clojure.java.io :as io] | |
[clojure.string :as s] | |
[clojure.pprint :as pprint] | |
[clojure.java.shell :refer [sh with-sh-dir]] | |
[cheshire.core :as json])) | |
(defn prsh | |
([sh] | |
(if (= 0 (:exit sh)) | |
nil | |
(do | |
(println "exit-code:" (:exit sh)) | |
(println "out:\n" (:out sh)) | |
(println "err:\n" (:err sh))))) | |
([sh force-print?] | |
(if (or force-print? (= 0 (:exit sh))) | |
nil | |
(do | |
(println "exit-code:" (:exit sh)) | |
(println "out:\n" (:out sh)) | |
(println "err:\n" (:err sh)))))) | |
(letfn [(extract [filename] | |
(subs filename 0 (.lastIndexOf filename ".")))] | |
(let [zig-json (json/parse-string (slurp "https://ziglang.org/download/index.json")) | |
version (get-in zig-json ["master" "version"]) | |
dl-url (get-in zig-json ["master" "x86_64-linux" "tarball"]) | |
filename (subs dl-url (inc (.lastIndexOf dl-url "/"))) | |
filename-seq (take-while #(.contains % ".tar") (iterate extract filename)) | |
folder-name (extract (last filename-seq))] | |
;download | |
(println "downloading new version") | |
(prsh (sh "curl" dl-url "--output" filename)) | |
;extract files | |
(doall | |
(for [f filename-seq] | |
(prsh (sh "7z" "x" f)))) | |
;remove old installation | |
(prsh (sh "rm" "-rf" "/usr/local/zig_download_installation")) | |
;copy | |
(prsh (sh "cp" "-r" folder-name "/usr/local/zig_download_installation")) | |
;mark executable | |
(prsh (sh "chmod" "-R" "777" "/usr/local/zig_download_installation")) | |
;cleanup | |
(prsh (sh "rm" "-rf" folder-name)) | |
(doall | |
(for [f filename-seq] | |
(prsh (sh "rm" f)))) | |
;delete old symlink | |
(prsh (sh "rm" "/usr/bin/zig")) | |
;create new symlink | |
(prsh (sh "ln" "-s" "/usr/local/zig_download_installation/zig" "/usr/bin/zig")) | |
(str "installed version " version))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
README if you want to use this: