-
Notifications
You must be signed in to change notification settings - Fork 4.9k
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
Create full PlatformManifest.txt in "live-live" dotnet/runtime builds #1362
Comments
Turns out this is blocking 5.0 uptake by various upstream repos: #1129. |
I looked deeper at the templating approach, and it is fairly complex. A decent implementation requires Arcade changes, and there are versions present that we can't trivially calculate to replace in a set of templates:
Something has changed that opens up more possibilities:
This is no longer true: each subset runs on its own set of machines. That means we can have every installer job depend on all outputs from the earlier subsets' jobs, just like the pre-consolidation approach with Core-Setup. Changing our approach means won't be fixing source-build's bad platform manifest, but that's not a new problem (not a regression). I think there will still be a decent amount of work because we no longer use NuGet transport packages. However, keeping the old approach is at least more straightforward and I believe this will unblock runtime build uptake much more quickly. At the moment I think this will be done EOW (Jan 10) but that's a very early estimate. |
@wtgodbe, re dotnet/aspnetcore#18250, I think we should standardize on the templating approach above. Also, this thread may be useful for context on the way things are done for the NETCoreApp platform manifests. |
Build running with the fix (using harvesting): https://dev.azure.com/dnceng/internal/_build/results?buildId=479360&view=results Once we get it through, I'm going to close this issue and open a new one tracking solving this for source-build. |
Build completed, manifest looks as expected. Closing as resolved. I have #1622 open to track fixing source-build's incomplete manifest. |
The platform manifest is a text file that describes the files in every platform's shared framework. The SDK uses it to filter FDE/FDD publish outputs. The manifest ends up in the targeting pack and runtime packs, at
data\PlatformManifest.txt
. A little example of the contents:Note that
coreclr.dll
/libcoreclr.so
/libcoreclr.dylib
are all listed: each platform's native binary. This list and data is harvested from the actual files, so multiple machines are necessarily involved.The consolidation effort (dotnet/runtime) is going to be building "live-live" builds: builds that take place on a single machine all the way through coreclr, corefx, and core-setup. It won't rely on cached files built by an earlier run of the repo. This means we can't use the current approach, because it needs multiple machines to produce all the native artifacts.
I think we need to stop using harvesting to populate this file, and instead calculate the contents. We probably need to keep a platform manifest template (list of files) in the source to act as a template.
This would normally be a maintenance hazard, but we can prevent that:
This does impact dev flows. Someone may add a new file to the shared framework and not know how to properly update the manifest template. To mitigate this, when the validation step fails, it should emit the corrected list of files and tell devs where they need to put it to fix up their PR.
This also fixes source-build, where there are even more constraints than "live-live" builds: https://github.com/dotnet/core-setup/issues/5297. (The platform manifest is already broken for source-build even without consolidation.)
Here are some other options I considered that I don't think are viable (especially short-term) and don't fix source-build. (Click me)
Have a "fan in" stage in the dotnet/runtime official build.
Defer the harvest to downstream.
Eliminate the need for a platform manifest file.
I think I should work on this, and in the meantime I think it's reasonable to disable "full" platform manifest generation (set
BuildFullPlatformManifest
to false) to unblock dotnet/runtime "live live" builds./cc @MichaelSimons @dleeapho @jkoritzinsky @jashook @dseefeld @crummel @NikolaMilosavljevic @adaggarwal
The text was updated successfully, but these errors were encountered: