| I am still trying to wrap my head around a giant monolithic repo model instead of breaking codes into multiple repos. At Amazon, for example, they have multi repos setup. A single repo represents one package which has major version.The Amazon's build system builds packages and pulls dependencies from the artifact repository when needed. The build system is responsible for "what" to build vs "how" to build, which is left to the package setup (e.g. maven/ant). I am currently trying to find a similar setup. I have looked as nix, bazel, buck and pants. Nix seems to offer something close. I am still trying to figure how to vendor npm packages and which artifact store is appropriate. And also if it is possible to have the nix builder to pull artifacts from a remote store. Any pointer from the HN community is appreciated. Here is what I would like to achieve: 1. Vendor all dependencies (npm packages, pip packages, etc) with ease.
2. Be able to pull artifact from a remote store (e.g. artifactory).
3. Be able to override package locally for my build purposes. For example, if I am working on a package A which depends on B, I should be able to build A from source and if needed to build B which A can later use for its own build.
4. Support multiple languages (TypeScript, JavaScript, Java, C, rust, and go).
5. Have each package own repository. |
And didn't you find that this created massive headaches trying to build many disparate and inconsistent dependencies across repos? I think the benefits touted from mono-repos are exactly illustrated by the pain points working with Amazon's multi repo setup, in my opinion.
https://danluu.com/monorepo/
"Refactoring an API that's used across tens of active internal projects will probably a good chunk of a day."
This was my experience.