Skip to content

Conversation

@dotnet-maestro
Copy link
Contributor

@dotnet-maestro dotnet-maestro bot commented Nov 5, 2025

Note

This is a codeflow update. It may contain both source code changes from the VMR as well as dependency updates. Learn more here.

This pull request brings the following source code changes

From https://github.com/dotnet/dotnet

Updated Dependencies

Associated changes in source repos

Updated Dependencies:
Microsoft.CodeAnalysis, Microsoft.CodeAnalysis.Analyzers, Microsoft.CodeAnalysis.CSharp, Microsoft.Net.Compilers.Toolset (Version 5.0.0-2.25515.111 -> 5.0.0-2.25554.104)
Microsoft.CodeAnalysis.NetAnalyzers, Microsoft.DotNet.ApiCompat.Task (Version 10.0.100 -> 10.0.101)
Microsoft.DotNet.Arcade.Sdk, Microsoft.DotNet.Build.Tasks.Archives, Microsoft.DotNet.Build.Tasks.Feed, Microsoft.DotNet.Build.Tasks.Installers, Microsoft.DotNet.Build.Tasks.Packaging, Microsoft.DotNet.Build.Tasks.TargetFramework, Microsoft.DotNet.Build.Tasks.Templating, Microsoft.DotNet.Build.Tasks.Workloads, Microsoft.DotNet.CodeAnalysis, Microsoft.DotNet.GenAPI, Microsoft.DotNet.GenFacades, Microsoft.DotNet.Helix.Sdk, Microsoft.DotNet.PackageTesting, Microsoft.DotNet.RemoteExecutor, Microsoft.DotNet.SharedFramework.Sdk, Microsoft.DotNet.XliffTasks, Microsoft.DotNet.XUnitExtensions (Version 10.0.0-beta.25515.111 -> 10.0.0-beta.25554.104)
Microsoft.DotNet.Cecil (Version 0.11.5-alpha.25515.111 -> 0.11.5-alpha.25554.104)
Microsoft.DotNet.XUnitAssert, Microsoft.DotNet.XUnitConsoleRunner (Version 2.9.3-beta.25515.111 -> 2.9.3-beta.25554.104)
Microsoft.NET.Sdk.IL, Microsoft.NETCore.App.Ref, Microsoft.NETCore.ILAsm, runtime.native.System.IO.Ports, System.Reflection.Metadata, System.Reflection.MetadataLoadContext, System.Text.Json (Version 10.0.0 -> 10.0.1)
Microsoft.NET.Workload.Emscripten.Current.Manifest-10.0.100.Transport (Version 10.0.100-rtm.25515.111 -> 10.0.101-servicing.25554.104)
NuGet.Frameworks, NuGet.Packaging, NuGet.ProjectModel, NuGet.Versioning (Version 7.0.0-rc.1611 -> 7.0.0-rc.5504)
System.CommandLine (Version 2.0.0 -> 2.0.1)
Microsoft.DotNet.XHarness.TestRunners.Common, Microsoft.DotNet.XHarness.TestRunners.Xunit, Microsoft.DotNet.XHarness.CLI (Version 10.0.0-prerelease.25527.1 -> 10.0.0-prerelease.25506.2)
@steveisok
Copy link
Member

@dotnet/runtime-infrastructure linker tests are failing with PackageReference System.Threading.AccessControl will not be pruned.. Are there supplemental changes coming that need to work their way through?

@dotnet-maestro
Copy link
Contributor Author

dotnet-maestro bot commented Nov 6, 2025

Important

The source repository has received code changes from an opposite flow. Any additional codeflows into this PR may potentially result in lost changes.

Please continue with one of the following options:

  1. Close or merge this PR and let the codeflow continue normally
  2. Close or merge this PR and receive the new codeflow immediately by triggering the subscription:
    darc trigger-subscriptions --id 74dc5d43-0b13-491a-b063-0f03b26d7664
  3. Force-flow new changes into this PR at your own risk (some PR commits might be reverted):
    darc trigger-subscriptions --force --id 74dc5d43-0b13-491a-b063-0f03b26d7664

💡 You may consult the FAQ for more information or tag @dotnet/product-construction for assistance.

@akoeplinger
Copy link
Member

@ericstj ^

@ericstj ericstj requested a review from marek-safar as a code owner November 6, 2025 17:48
@dotnet-policy-service dotnet-policy-service bot added the linkable-framework Issues associated with delivering a linker friendly framework label Nov 6, 2025
@ericstj
Copy link
Member

ericstj commented Nov 6, 2025

@akoeplinger This hack should be removed, like you did in main. 2abf811

Interesting that it took this long for that change to be observed by Mono.Linker.Tests.csproj. Those must not actually be building against the live product. Nevermind, I see why this just hit now. It was bugfix in RC2 that fixed the pruning data to include this package which moved down in 10.0. It does mean that these are building against SDK targeting pack instead of live built, which is probably an unfortunate design of this subset.

@ericstj
Copy link
Member

ericstj commented Nov 6, 2025

Looks like this test is failing due to wrong RuntimeInformation.FrameworkDesciprtion. It would seem the validation build has a stable version but STABILIZE_PACKAGE_VERSION might not be set.

I grabbed a binlog and noticed -->
InformationalVersion = 10.0.1

This is happening because of this -->

<InformationalVersion Condition="'$(InformationalVersion)' == '' and '$(PreReleaseVersionLabel)' == 'servicing'">$(ProductVersion)</InformationalVersion>

And this PR changed the PreReleaseVersionLabel to servicing.

What's our expectation here?
#83311 changed this behavior - which has been around since 8.0.

It looks like 9.0 servicing set both

<StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">true</StabilizePackageVersion>
<DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind>

While this is not set in 10.0

<StabilizePackageVersion Condition="'$(StabilizePackageVersion)' == ''">false</StabilizePackageVersion>
<DotNetFinalVersionKind Condition="'$(StabilizePackageVersion)' == 'true'">release</DotNetFinalVersionKind>

So maybe that's what we should do here, that would fix these tests, since they use this to control the behavior. @mmitche @akoeplinger ?

@steveisok
Copy link
Member

@ericstj @mmitche @akoeplinger ping on ^

@mmitche
Copy link
Member

mmitche commented Nov 13, 2025

@ericstj The stabilization setting isn't controlled at the repo level in UB. It's essentially a pipeline parameter. Is it possible to avoid assumptions based on the servicing label?

The reason I ask is that we may still produce non-stable servicing builds, possibly for hotfixes.

@ericstj
Copy link
Member

ericstj commented Nov 14, 2025

So right now, the product has the correct value (stable), it's just the tests that are wrong (assuming not stable). I'm guessing we want to preserve this, even for pre-release hotfixes - but that's up for debate.

Tests have behavior that differs by the value of DotNetFinalVersionKind

<DefineConstants Condition="'$(DotNetFinalVersionKind)' != ''">$(DefineConstants);STABILIZE_PACKAGE_VERSION</DefineConstants>

While the product's behavior differs off of PreReleaseVersionLabel

<InformationalVersion Condition="'$(InformationalVersion)' == '' and '$(VersionSuffix)' == ''">$(ProductVersion)</InformationalVersion>
<InformationalVersion Condition="'$(InformationalVersion)' == '' and '$(PreReleaseVersionLabel)' == 'servicing'">$(ProductVersion)</InformationalVersion>
<InformationalVersion Condition="'$(InformationalVersion)' == '' and '$(VersionSuffix)' != ''">$(ProductVersion)-$(VersionSuffix)</InformationalVersion>

I shared those other properties to show how this was working before.

Maybe we just make the tests honor DotNetFinalVersionKind to fix this, and avoid those other intermediate properties. Separately folks can decide what they want the behavior to be for pre-release hotfixes.

@ViktorHofer
Copy link
Member

Regarding pruning:

It does mean that these are building against SDK targeting pack instead of live built, which is probably an unfortunate design of this subset.

Note that even if those components build with the live targeting pack, work needs to be done in runtime to give the SDK the live PackageOverrides.txt for pruning. Filed #121611

@akoeplinger
Copy link
Member

StabilizePackageVersion is no longer used since #116152.

I didn't look closely here but basically what the tests try to verify is that FrameworkDescription only contains the 10.0.0 version without the semver suffix to prevent regressing #93913

@mmitche
Copy link
Member

mmitche commented Nov 18, 2025

@premun @dotnet/prodconsvcs

There hasn't been flow from runtime 10.0 to VMR in like 2 weeks...could this PR be the reason?

@ericstj
Copy link
Member

ericstj commented Nov 18, 2025

More test failures around the new versioning --

WARNING failure message 'The command output did not contain expected result: '10.0.1-ci'
File Name: /private/tmp/helix/working/B4C4097D/w/9EEB0897/e/test_artifacts/l3b24wvh.dnp/HelloWorld/HelloWorld
Arguments:
Environment:
DOTNET_ROOT =
DOTNET_CLI_TELEMETRY_OPTOUT = 1
DOTNET_ROOT_X64 =
DOTNET_CLI_HOME = /tmp/helix/working/B4C4097D/w/9EEB0897/e/.dotnet
DOTNET_ROOT(x86) =
DOTNET_HOST_TRACE = 1
Exit Code: 0x0
StdOut:
Hello World!


.NET 10.0.1

It's like we didn't do readiness with PR validation?

@mmitche
Copy link
Member

mmitche commented Nov 19, 2025

More test failures around the new versioning --

WARNING failure message 'The command output did not contain expected result: '10.0.1-ci'
File Name: /private/tmp/helix/working/B4C4097D/w/9EEB0897/e/test_artifacts/l3b24wvh.dnp/HelloWorld/HelloWorld
Arguments:
Environment:
DOTNET_ROOT =
DOTNET_CLI_TELEMETRY_OPTOUT = 1
DOTNET_ROOT_X64 =
DOTNET_CLI_HOME = /tmp/helix/working/B4C4097D/w/9EEB0897/e/.dotnet
DOTNET_ROOT(x86) =
DOTNET_HOST_TRACE = 1
Exit Code: 0x0
StdOut:
Hello World!


.NET 10.0.1

It's like we didn't do readiness with PR validation?

There was PR validation on the internal flow

@ericstj
Copy link
Member

ericstj commented Nov 19, 2025

There was PR validation on the internal flow

Maybe we didn't test non-stable PR validation, or we did something different during readiness then we're doing now. Regardless, we have another set of host tests to fix here. I can give it a crack. cc @agocke

Looks like the value of this comes from here

Console.WriteLine(RuntimeInformation.FrameworkDescription);

Tests are getting

<Target Name="ReturnProductVersion" Returns="$(Version)" />

Which is the package version.

So similar to before -- FrameworkDescription is InformationalVersion which has no suffix in servicing, but tests are assuming it should match the package version. There are many places where we use this same target / version value - not all are asserting that it should match FrameworkDescription so I'm inclined to just relax the test to only look for the 3-part version.

@ericstj
Copy link
Member

ericstj commented Nov 19, 2025

A few more host tests failing, which I'll help fix. @akoeplinger have you looked at the other failures?

@ericstj
Copy link
Member

ericstj commented Nov 21, 2025

@akoeplinger looks like JIT tests are something you looked at in main -- #121164 (comment). I ported your fix.

@ericstj
Copy link
Member

ericstj commented Nov 21, 2025

So there are some networking failures, and some more version inconsistency failures (assuming prerelease vs not prerelease in servicing). This time in tracing/eventpipe tests.

0.4s: ClrProductVersion: "10.0.1-ci"
System.Exception: ClrProductVersion must match. Expected: "10.0.1", received: "10.0.1-ci"

string expectedClrProductVersion = typeof(object).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>()?.InformationalVersion;

Utils.Assert(expectedClrProductVersion.Equals(clrProductVersion), $"ClrProductVersion must match. Expected: \"{expectedClrProductVersion}\", received: \"{clrProductVersion}\"");

I think in this case we should make the ClrProductVersion sent on the pipe to not have the suffix - or make the test use something other than InformationalVersion to compare to.

RuntimeProductVersion is defined as $(Version)

#define RuntimeProductVersion $(Version)

So this is more fallout from setting PreReleaseVersionLabel to servicing without setting StabalizePackageVersion.
#121366 (comment)


I've been plowing ahead assuming product behavior was correct (packages with version suffix, but informational version without), but this is the first time I'll need to adjust the product. I'll try making this fix and hopefully nothing else breaks.

What do we want?

Previous releases in servicing:

  • Always built with stable versioning. Packages + InformationalVersion + FrameworkDescription

Currently in 10.0:

  • No longer use stable versioning in non-stable builds. Packages get -servicing suffix (or -ci in CI builds). InformationalVersion+FrameworkDescription currently refelects the stable versioning.

My thinking was that this was intentional because @mmitche mentioned we might want to share pre-release servicing builds - which we might want to look like the real servicing build in all ways but the suffix.

@mmitche @richlander @jkotas @ViktorHofer -- what do you all think? This is primarily about the behavior of pre-release servicing builds.

@ViktorHofer
Copy link
Member

Correct, this behavioral change was intentional. We don't stabilize at the repo level anymore. Instead, we flow the configuration for that in as an input parameter to the repo build in the VMR.

We don't want individual repos to stabilize as that's costly when publishing packages as that requires a dedicated feed, etc.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-codeflow for labeling automated codeflow linkable-framework Issues associated with delivering a linker friendly framework

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants