What's the most elegant way to get the equivalent of something like ls *.log
, with a result that is a sequence of the file name strings, in my babashka script? I tried using sh
but couldn't make it work with the *
. I resorted to the following which works but it seems like there must be a much better way:
(filter #(= ".log" (apply str (take-last 4 %)))
(map #(.getName %) (.listFiles (File. "."))))
Yes or list-dir
Nice. So it seems the equivalent of the code I posted above, if I've done (require '[babashka.fs :as fs])
, is:
(map fs/file-name (fs/glob "." "*.log"))
I am preparing a monorepo where each subproject has its own bb.edn
file. However, there are sets of useful tasks that I'd like to reuse in some of them.
What would you recommend for avoiding any copy/pasting?
you can put them in a common place like https://github.com/wilkerlucio/pathom-viz/blob/master/src/tasks/tasks.clj then refer them in the corresponding bb.edns like https://github.com/wilkerlucio/pathom-viz/blob/master/bb.edn
that's what I would recommend as well
Indeed, that's what I have been doing but it still implies copying the tasks themselves, and if you change the :doc
you have to do it everywhere, for instance. So it was getting messy.
Perhaps generate the tasks file using Selmer? perhaps a little hacky ;)
Related to previous but different. For very common tasks that end up pretty much in all subprojects (eg. test
), I am trying to define them in my root bb.edn
and specify a :dir
when calling (clojure ...)
(where a subproject lives and has its deps.edn
file).
However I am having an issue with a dep that points to a :local/root
:
Error building classpath. Manifest type not detected when finding deps ...
In spite of the path to that jar being correct. Doesn't happen when executing directly from the subproject dirok, I think I fixed it on master. Could you try out a binary from master? Available in #babashka-circleci-builds in a few minutes
I'll add a test for it later
don't remember which os you use, bit here's a linux one: https://20537-201467090-gh.circle-artifacts.com/0/release/babashka-0.4.7-SNAPSHOT-linux-amd64.tar.gz
For me at least it works locally now:
borkdude@MBP2019 /tmp $ bb -e '@(babashka.deps/clojure ["-Sforce" "-M" "-r"] {:dir "proj1"})'
Clojure 1.10.1
user=> (require 'medley.core)
nil
@adam678 ok, made some more tests + fixes. I think it should be good now... https://20567-201467090-gh.circle-artifacts.com/0/release/babashka-0.4.7-SNAPSHOT-linux-amd64.tar.gz
@borkdude Excellent, I'll give it a go tomorrow, thanks
Seems to work fine now, REPL starts and classpath is properly computed 🙂
🎉
All right, using the heavy artillery then 😛
Does it happen when you use (shell {:dir ...} "clojure ...")
instead? if not, then it might be a bug somewhere in bb
It seems to work using shell
, yes
Yep, all is perfect from what I see
hmmm, can you make a repro for me? I can look into fixing it
Sure if I manage to reproduce it 🙂
<3
Haven't mentioned it here yet, but yesterday I made a CLI that exposes specter so you can use its DSL to filter/transform some EDN from stdin: https://github.com/borkdude/specter-cli/releases
Is you can still reproduce it locally, it might also be a caching issue (in .cpcache)
is there a way to get the path to the currently in use babashka interpreter? something like $0
? so that i could call the same bb to run a child script without needing it to be in $PATH
?
actually yes, let me look it up
🙇
i looked in docs and checked (System/properties) but haven't found anything yet
am currently trying to discover vars in the repl 🙂
$ bb -e '(-> (java.lang.ProcessHandle/current) .info .command .get)'
"/Users/borkdude/Dropbox/bin/bb"
Perhaps good to document somewhere
:awesome: thank you!
I documented it here: https://github.com/babashka/babashka/wiki/Bash-and-Babashka-equivalents#current-process-executable
hmmm so I could combine jet with specter-cli to replace something like jq for manipulating json
@corasaurus-hex You could, but jet
also already has a query language and the --func
option for normal Clojure functions
oh! I didn't know it had that 😅
does adding specter to jet make sense?
I mean if making specter-cli made sense, meaning jet wasn't cutting it, does it make sense to add it to jet?
it's entirely possible i'm missing loads of context here
both are extremely cool
I just really can't wrap my head around jq's language for some reason
I have really really tried
Same here, that's why I just use jet
with either --query
or --func
. I don't know yet about adding specter to jet, I actually am not that experienced with it, but someone in the #sci wanted it to use together with sci, so I made it work for that reason
ohhh I see
it seems like a good candidate
makes sense
I ought to sell my team on jet vs jq. we're a clojure shop anyways and our mildly complicated jq is basically unmaintaintable
cool. sometimes I also just use bb for json. some people have aliases for that (https://twitter.com/quoll/status/1401141320010420232)
I think @nate also shared one back in the early days where you could provide an expression, it's not so hard to figure out
oh I found something: https://twitter.com/ndj/status/1249505127729213441
and then I shared another one here: https://twitter.com/borkdude/status/1249818512295632897
a collection of jet & bb one-liners would be really cool
especially aliases
what you can also do instead of aliases is make an executable bb script and dump that in a bin folder
I have one of those for symlinking my dotfiles
@adam678 I was able to reproduce it: https://github.com/babashka/babashka/issues/914
This happens because the clojure task is a 2 step process: 1) deps resolved using tools.deps.alpha, 2) the actual clojure JVM process. But the options currently only apply against the second step where the process is launched.