We have several base repositories that we use to quickly scaffold new projects. These include base repositories for things like:
- TypeScript + Node libraries
- TypeScript + Node microservices / workers
- Angular applications
- gRPC stub / protobuf libraries
- etc.
The base repositories contain the all the configuration and folder structure necessary to start a new project, similar to ng new, create-react-app, yeoman generators, etc. This includes things like CI config, testing config, linting config, tsconfig, package.json with scripts and dev dependencies, VSCode files for settings, extension recommendations, launch configs, etc. Basically the repos contain everything you need to share between these similar repositories except the code.
There are tools out there for sharing code between repos, like bit, or you can publish libraries to share code as well, which we make extensive use of. However, I haven't found a great way to share the configuration files between many repositories. We could simply clone from base repositories or write our own generators, but the problem is keeping the configuration in sync. For instance, if we change our CI config, I don't want to have to remember which 50 repositories are based on that which also need changed.
We can't be the only firm out here with over 100 repos and no end in sight to the growth as we split into more and more distributed services and libraries. We can adopt the monorepository pattern, but it still doesn't change the fact that each of these projects inside the monorepo still needs its own config that has to be kept in sync across all of the projects.
So the question is, what tool or technique am I missing that can handle keeping these configurations in sync across many different repositories?