arcade-services icon indicating copy to clipboard operation
arcade-services copied to clipboard

Modernize dependency and version file handling in Maestro

Open premun opened this issue 7 months ago • 2 comments

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.props contain both properties updated by automation that match dependencies declared in Versions.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.xml necessarily need a property in Versions.props. Sometimes, it's enough to have the version in Versions.Details.xml and in Directory.Packages.props. We shouldn't force creation of properties in Versions.props when 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.

premun avatar May 28 '25 08:05 premun