Need advise on the following:
In my company I am developing .NET class libraries to be used by external stakeholders, and I am sharing them on a private NuGet feed to which the stakeholders have access.
The libraries are dependent on one core library as shown below. Currently I'm maintaining these libraries in a single VS solution, obviously into one Git repo. I'm following SemVer to version them.
CoreLibrary
CoreLibrary.Extension1 (references CoreLibrary as project reference)
CoreLibrary.Extension2 (references CoreLibrary as project reference)
...
There might be more of these extension libraries in the near future
Up until now I have always manually versioned them from within Visual Studio (manually setting the correct values in AssemblyInfo.cs whenever I need to bump a version) and used a batch file in each project to pack and push that specific library to NuGet.
But now I recently started looking into VSTS and my next undertaking is to automate builds and releases as much as possible, also with automatic versioning. I stumbled upon GitVersion which I think can help greatly with that last part.
But, here's the but. If I understand correctly, GitVersion operates at the repository level, so a given semver version calculated by GitVersion applies to ALL assemblies/libraries in a repository, right ?
So what are your suggestions for release and versioning strategies for these libraries ?
1) Keep everything like now in one solution and repo and whenever there is a change in one package that needs to be published (say CoreLibrary.Extension1), this generates a NuGet package for all other libraries too. So if all packages are on 1.0.0 and there is one small change in one of them, they all get bumped to v1.1.0 and all get packed and pushed ?
2) Create a git repo per project and let GitVersion work its magic on each repo separately. Reference the CoreLibrary via NuGet in the Extension libraries.
Option 2 is the cleanest I think and has the advantage that versioning and packaging is handled per project, but might be quite an overkill on the workload in terms of maintaining them, especially given the fact that I am the sole developer of these libraries.
What are your thoughts ? Which option would you opt for given the context ? Have I missed any other options that might be worth considering ?
Setting my first steps in automated builds and release so any advise is more than welcome.
Thanks