| Although there are definitely merits in moving the complex logic outside of the CI/CD JSON/YAML DSL, especially when using monorepo setups that can become rather complex in their logic (that they made Google create Bazel, I can think of some interesting Borg/K8s analogies btw), I also believe that modern CI/CD platforms have made several sensible steps in the right direction to handle these more complicated use cases. (Disclaimer: I work at CircleCI) At CircleCI for example, we have added valuable features like a VSCode extension[0] to validate and "dry-run" config from within your IDE, we have local runners[1] that you can use to test and run pipelines on your local machine and your own infra, we have dynamic config[2], a Javascript/Typescript SDK[3], a CLI that can validate and run workflows locally[4], and QoL additions like a no-op job type[5] and flexible requires, along with flexible when statements and expression based job filters[6]. And finally, it's of course also possible to combine different approaches into a "best of both worlds" approach, f.e. combining Dagger with CircleCI[7]. [0]https://circleci.com/docs/vs-code-extension-overview/ [1]https://circleci.com/blog/using-runner-for-local-testing/ [2]https://circleci.com/docs/dynamic-config/ [3]https://circleci.com/docs/circleci-config-sdk/ [4]https://circleci.com/docs/how-to-use-the-circleci-local-cli/ [5]https://circleci.com/changelog/new-job-type-no-op-job-can-ma... [6]https://circleci.com/changelog/more-flexible-job-required-ca... [7]https://docs.dagger.io/integrations/circleci/ |