HACKER Q&A
📣 StreamBright

Which CI/CD do you use for a monorepo?


I am looking or the simplest (ideally YAML free) CI/CD that uses either Dockerfiles, worse YAML files to trigger builds.

I would like to place a file to a folder that has specific instructions how to build the projects.

Example:

- repo/backend/api

- repo/frontend/www

- repo/frontend/app

I would like to have 3 files that define how each folder builds. Api might be Python and deployed to arm64, www is static html, css, etc. deployed to a CDN.

I do not understand why the major CI/CD vendors have a convoluted YAML hell with custom images and commands when we have Docker for 10 years. In last 10 years non-of the CI/CD vendors I know of created a platform where I can use a Dockerfile that references a public or private image that I can use to build my project. At this stage I am only AWS Codebuild that allows the use of Docker image from ECR but I still need to do YAML.

Is there a company that has a super simple CI/CD that would be 5 minutes to set up?

We have wasted couple of weeks on CircleCI and whenever we need to change it is a major pain and it takes hours to find out which YAML line has an incorrect indentation or why a certain tool breaks when used on a "orb".

I am just getting tired of these.


  👤 ianpurton Accepted Answer ✓
You want to take a look at Earthly. https://earthly.dev/

This gives you a mix of docker and a makefile.

The best bit is you can test your pipeline locally and you are vendor agnostic.

I'm using it here https://github.com/purton-tech/cloak


👤 melezhik
You can try out SparrowCI (https://github.com/melezhik/SparrowCI) -it’s simple and could be self-hosted. It builds on docker images, so if you spin up an SparrowCI on arm64 host you should be probably good. It’s not possible to have 3 separate CI pipelines but you can organize repo pipeline in such a way that it’s split by 3 or many tasks to cover different parts of your system.

👤 marcosnils
Hi there! Dagger (https://dagger.io) contributor here. Looks like Dagger could be a very nice fit for what you're looking for; it allows you to define your pipelines in either Go, Python or Typescript/JavaScript (more languages to come) as well as targeting multiple CPU platforms. Regarding monorepos, here's a link on how Dagger makes that experience quite nice: https://youtu.be/vJfoyN77fo0

If you have any questions or need any further help, happy to connect in our discord server!

Cheers!


👤 zekenie
i’ve liked github actions for this. i used it on WebReducer (https://github.com/zekenie/web-reducer)