-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Design and implement proper version flow for Unified Build #4048
Comments
This somewhat reminds me of #3928 in potentially there needing to be conditional aspects within Version.Details.xml. If we go that route, it would be good to have a design which can satisfy both scenarios. |
I think this is complete at this point. @mthalman? |
You're referring to my changes in dotnet/installer#18557? What about the other two open issues linked under Work Items above? |
I think that covers the first solution and represents a good final design. It's simple. It matches the product graph, it can change over time as need be, etc. |
Closing as completed. |
We need a design as to how to properly determine dependency versions in Unified Build. This design must hold these 3 scenarios simultaneously:
msbuild
but notruntime
)msbuild
, but notwinforms
)msbuild
, but notsource-build-externals
)To illustrate the problem, consider a dependency
Foo
thatmsbuild
takes. Today,msbuild
has control over what version ofFoo
is used when building in isolation. It may be required to choose a specific version ofFoo
, say1.2.3
, becausemsbuild
's outputs that depend on Foo are used in a context where it must depend onFoo
at1.2.3
.So far so good. Then source-only builds come along. Let's say that
Foo
is produced byruntime
and redistributed with msbuild in the .NET SDK. Now we have a new context thatmsbuild's
outputs that depend on Foo are used in, and we have a new invariant. When building these source-only builds, msbuild must depend onFoo
produced byruntime
within the same source-only build, let's say that's2.0.1
. This is not ideal, becausemsbuild
ships two binaries that depend on different versions ofFoo
, built from the same source. One of those is tested less than the other. However, this is not a problem that is resolvable in any reasonable fashion.We have built up infra to deal with this dual way of doing things over time:
Foo
is not just a ref assembly (if it's implementation), we actively flow its version fromruntime
tomsbuild
. This is done by defining a repo dependency graph in the source-only infra, harvesting versions of packages produced by repositories built beforemsbuild
, and then applying those to msbuild based on what is in itsVersion.Details.xml
file.Unified Build shares the source-only build infra. Now we have a 3rd scenario. The Microsoft built product out of the VMR should look the same in terms of its dependency flow as a repo built in isolation. This is particularly important for those repos still maintaining a separate official build, like VS components.
The challenge here is that the dependency graph in the traditional build infra is held in data in Maestro and in people's heads (X should take latest of Y and so I need an active weekly maestro subscription, or X should match VS's version of Y and so I'll update manually as need be). The source-only build also holds a dependency graph, but it focuses on source-only flow. We need to figure out how to augment this to work for all scenarios.
Goals would be:
DotNetBuildSourceOnly
" all over the place.Some initial thoughts:
It's possible we would use some combo of the two. In addition, it would be great to have a solution we could use for the short term. This problem should not be underestimated and we don't want to get blocked.
Work Items
The text was updated successfully, but these errors were encountered: