Can we address the elephant in the room, please? YAML is not a programming language, no matter how many special keys are bolted onto it. It's literally in the acronym. YAML Ain’t Markup Language.
Here are things YAML doesn't have that should be present in a decent declarative DSL:
code reuse
functions
variables
libraries
YAML anchors don't count for much.
conditionals and control flow
boolean logic
if blocks
string interpolation
arithmetic
regular expressions
string matching
data structure methods
joining lists
list iteration
etc
CircleCI is trying to fix problems with YAML by bolting more and more special keys on to emulate these things YAML doesn't have, but this just ends up uncovering more problems.
For example, YAML doesn't support functions or libraries, so CircleCI came up with "commands" and "orbs" to attempt to do the same thing. This is a nice addition, but it has now made YAML's lack of other features even more painful. There is no way to pass an interpolated value to a command or an orb, and you're left either having to use static values or really "clever" workarounds to deal with the problem.
CircleCI can probably fix these new problems by adding additional functionality, then rinse and repeat until everything is golden. But if we take this to its extreme conclusion, CircleCI is just going to essentially recreate Jsonnet, and I'm guessing there's a reason CircleCI didn't just use Jsonnet in the first place.
So rather than continuing this insane dance around the core problem of YAML not actually being suited for use as a declarative DSL, can we have CircleCI maybe consider creating a proper DSL for configuring a CI run on their platform?
CCI-I-950