Nice to Woodpecker CI getting some traction. Great software for selfhosted ci. Simpler to start than Jenkins, not as flexible ofc, but most projects do not require that amount of flexibility and footguns. Woodpecker one of the best tools for small/medium self-hosted CI's out there atm.
I just took one look, I had never heard of it before, and... it's depending on the serialization order of steps in the YAML to run pipelines?! What fresh hell is this?
Loading the YAML file in a language where dictionaries/hashmaps don't preserve the insertion order and serializing again will break your file? How could they fail at such a basic step of making a YAML-configurable CI system?
This is the worst abuse of YAML I have ever seen. Was putting `-` in front of each step too obvious?
I am not hating on the whole of YAML, but the way they are misusing it in Woodpecker. None of those other services you mention are doing something this bad, e.g. relying on parts of YAML that are NOT standard (ordering of elements in a dict) and not supported by some languages/libraries.
> From what I’ve seen, the config uses dictionaries for concurrent pipelines.
Oh wow. You’re right. That is dumb. When I glanced over the example config file it looked like frontend and backend was intended to run in parallel (because that would have been the sensible way to design it).
It’s such a shame that the authors aren’t receptive to the problem because the longer they leave it the bigger the issue to change it will be.
The problem here is that if you load this YAML, modify it in code, and write it back out, but use a library or language that doesn't keep the ordering of the two entries the same, they will run in the wrong order.
As in their example: backend will be built, followed by frontend. Serially. Those are two different steps.
If instead you loaded this file and saved it without keeping the dictionary ordering the same, it is possible that frontend would not get built before backend.
Gitlab CI requires you to define your stages up-front, and tasks in the same stage all get executed at the same time.
On Github CI all tasks get executed in parallel by default, unless you specify a needs dependency at which point it will run the steps as required to meet those needs requirements.