Not a fan of Ruby, but the things they outline here are pretty good for testing just about any language.
I maintain a fork of llvm and a JIT runtime written in Rust where we’ve employed some of these same techniques. E.g. caching llvm builds, running things in parallel…
Any sufficiently complex, well tested, system has the potential for long CI times. It’s not something unique to Ruby or dynamic languages.
Never heard of this language, but you’d be surprised how hard it is to write a correct and portable shell script.
Personally, I’d break out python once the script gets larger than a few lines, or rust if I want something more proper.