While Google started automating its build tests in 2003, the engineering industry took longer to do the same. But automation was sorely needed: Software systems are growing larger and ever more complex… To make matters worse, new versions are pushed to users frequently, sometimes multiple times each...
I have to say, pretty much every CI/CD tool, build automation or whatever you want to call it, sucks.
Somehow they all manage not to offer boilerplate actions since that would be too restrictive, yet they also stand in your way if you want to have advanced features.
I often end up writing pipeline steps/jobs thinking "how is that not already built-in?".
And my absolutely biggest pain point: why the fuck is there not a single tool that lets me execute pipelines locally? Why do I have to have 200 commits all saying a variation of "pipeline test"?
The sentiment of the first half of your comment is the cause of the problem you describe in the second half. Why /should/ the CI tool have any "steps" built in? Use a task runner, or script in your repo for any task you expect CI to do. Configure CI to run the same command you would run locally.
It's not the same thing. Sometimes there are rules/conditions in the pipeline you need to test. Sometimes there are child pipelines. There really should be a way to simulate a pipeline run locally.
It can make the UI much nicer (though I agree there are probably better ways to do it, e.g. native support for letting the program output determine the UI).
Sometimes you need to run different things on different machines/OSes, and it's easier if you have separate steps there.