Is it time that we solved building multirepo applications once and for all?
After 9 months working from home I'm starting to become more restless. I haven't had the energy up until now to work with my pet projects that I never complete due to way too grandiose ideas that are totally out of proportion. But now I'm ready, now I will start spending a few evenings every week to work on something new, something that is needed by the community, something at a scale I can actually complete. I want to give back something to humanity, it doesn't matter if it's small and not very technical, but I want it to be valuable to people and make the devops world a better place.
So I was thinking of what I'm good at and what I understand well enough to not make something that's irrelevant without me knowing about it until it's finished. I happen to be pretty good at making build pipelines, I'm talking about the real deal with merge requests, integration tests, dependency chains, reproducibility, etc.
The tool I had in mind would be a reboot of the build system I made for my current client which I've been working with/on for a few months. It builds a couple of embedded Linux platforms, a set of applications that can run on said platforms, and finally a couple of complete firmware images put together by slapping a subset of the applications on top of one of the Linux platforms. I want to generalize this to be able to build whatever you like such as node or python applications, not just embedded linux applications.
Some of the features I can think of from the top of my head.
Fully reproducible, check out the meta repo from 14 years ago on any computer be it windows, Ubuntu, arch or nixos and hit build. No dependencies required other than installing one single binary and you'll get the same artifacts as you got 14 years ago down to the last bit.
Smart caching, only build what have never been built on a build server before, the rest is brought in from cache.
Distributable builds, you can add as many machines as you'd like.
Coherent, run the exact same command to build on your dev machine as you run on the build servers.
Highly integratable, use it with github actions, gitlab ci, jenkins, Travis, drone, circle ci, or just locally on your own machine.
Would you be interested in a canned solution such as this? If not, why? If yes, what would you want to get out of it?