arcade-services
arcade-services copied to clipboard
Modernize dependency and version file handling in Maestro
Context
Flowing dependencies means updating several files:
-
eng/Version.Details.xml -
eng/Versions.props -
global.json -
NuGet.config -
.config/dotnet-tools.json
This system has been in place since 2019 or longer and several new features around declaring dependency versions have been introduced such as Central Package Management or Package Source Mapping.
It is time to incorporate support for these features into Maestro and modernize the process.
Firstly, we need a design on how Maestro will handle CPM with regards to existing Versions.props - some repos use both and include Versions.props in Directory.Packages.props and then use the variables. But maybe that is not necessary.
Secondly, there are also further requirements around managing Versions.props:
- Today,
Versions.propscontain both properties updated by automation that match dependencies declared inVersions.Details.xml. However, these files are often also manually managed by people and contain custom logic, variables and other things. It would be good to split this file into one which is purely managed by automation (Maestro) and the user-defined one. - Further, not all items from
Version.Details.xmlnecessarily need a property inVersions.props. Sometimes, it's enough to have the version inVersions.Details.xmland inDirectory.Packages.props. We shouldn't force creation of properties inVersions.propswhen those are not required.
Goals
- Gather requirements and design how a modern approach to dependency declaration should look like.
- Implement the support for CPM, PSM and for quality of life improvements around version file handling (e.g. split files, do not force properties, ...).
- Make sure the system is backward compatible.