Example of running
bb scan.clj --search nodejs
or use the below command with vscode calva emacs or similar bb nrepl-server
(require '[clojure.string :as str]) | |
(require '[babashka.cli :as cli]) | |
(require '[babashka.fs :as fs]) | |
(require '[clj-yaml.core :as yaml]) | |
(def file-list (fs/glob "." "**{package.yml}")) | |
(defn parse-yaml-file [file] | |
(try | |
(yaml/parse-string (str (slurp file))) | |
(catch Exception _ | |
(prn (str "Failed to parse or open " file))))) | |
(defn fetch-packages-with-deps | |
([key package] | |
(->> file-list | |
(map str) | |
(map parse-yaml-file) | |
(filter (fn filter-deps [deps] | |
(some #(= % package ) | |
(get deps key) ))) | |
(map :name)))) | |
(def cli-options {:search {:coerce :string}}) | |
(let [params (cli/parse-opts *command-line-args* {:spec cli-options}) | |
results {:builddeps (fetch-packages-with-deps :builddeps (:search params)) | |
:rundeps (fetch-packages-with-deps :rundeps (:search params))}] | |
(prn "Run dependencies") | |
(mapv prn (:rundeps results)) | |
(prn "Build dependencies") | |
(mapv prn (:builddeps results)) | |
(prn "sudo eopkg install " (str/join " " (into #{} | |
(concat | |
(:rundeps results) | |
(:builddeps results)))))) |