Skip to content

Instantly share code, notes, and snippets.

@rutenkolk
Created September 16, 2021 22:35
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rutenkolk/dbd970d03a0d012b671db38434ccbfa7 to your computer and use it in GitHub Desktop.
Save rutenkolk/dbd970d03a0d012b671db38434ccbfa7 to your computer and use it in GitHub Desktop.
upgrading zig to the latest version with Babashka
#!/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)))
@rutenkolk
Copy link
Author

rutenkolk commented Sep 16, 2021

README if you want to use this:

  • This gist assumes you have 7z installed and on path
  • This gist assumes you run x86_64_linux
  • The install directory may be non-optimal
  • The permissions given may be overkill (chmod 777)
  • You probably need to run this as root

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment