diff --git a/eng/Build.props b/eng/Build.props index dbaf0c170561..82b60be223a2 100644 --- a/eng/Build.props +++ b/eng/Build.props @@ -56,14 +56,14 @@ $(RepoRoot)src\SignalR\perf\benchmarkapps\**\*.csproj; " /> - + - + - + @@ -264,7 +264,7 @@ <_VcxTargetPlatform Condition="'$(TargetArchitecture)' == 'arm64'">ARM64 - + diff --git a/eng/Common.props b/eng/Common.props index 6c75a0f82850..fe70563343fd 100644 --- a/eng/Common.props +++ b/eng/Common.props @@ -11,7 +11,7 @@ $(TargetOsName)-$(TargetArchitecture) true - $(TargetRuntimeIdentifier) + $(TargetRuntimeIdentifier) $(BuildNodeJSUnlessSourcebuild) false diff --git a/eng/Dependencies.props b/eng/Dependencies.props index cc03487fc95b..7d944888c843 100644 --- a/eng/Dependencies.props +++ b/eng/Dependencies.props @@ -258,4 +258,23 @@ and are generated based on the last package release. Condition=" $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Runtime.')) or $([System.String]::new('%(Identity)').StartsWith('Microsoft.NETCore.App.Crossgen2.'))">$(MicrosoftNETCoreAppRefVersion) + + + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + + $(MicrosoftCodeAnalysisVersion_LatestVS) + + diff --git a/eng/Publishing.props b/eng/Publishing.props index 0fe48f75295b..f53bb87814a6 100644 --- a/eng/Publishing.props +++ b/eng/Publishing.props @@ -1,15 +1,14 @@ + true - + false + '$(DotNetBuild)' != 'true'">false false diff --git a/eng/SharedFramework.External.props b/eng/SharedFramework.External.props index 8b5b19fb9861..9096f00ebe40 100644 --- a/eng/SharedFramework.External.props +++ b/eng/SharedFramework.External.props @@ -43,6 +43,7 @@ + - + - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 @@ -357,52 +357,52 @@ https://github.com/dotnet/roslyn afdd413cee50c16318620252e4e64dc326e2d300 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 - + https://github.com/dotnet/dotnet - ad8565092bbfdd5c8b4a94a718d10b2d394f7aee + a4d6fdc935d5da12efb00a0b3b693ff1439e0b41 https://github.com/dotnet/extensions diff --git a/eng/Versions.props b/eng/Versions.props index d0b63dadd600..27753b41d821 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -67,97 +67,97 @@ --> - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 - 10.0.0-preview.5.25265.101 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 + 10.0.0-preview.5.25270.108 9.6.0-preview.1.25260.2 9.6.0-preview.1.25260.2 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 - 10.0.0-preview.4.25265.101 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 + 10.0.0-preview.4.25270.108 - 10.0.100-preview.5.25265.101 - 10.0.100-preview.5.25265.101 + 10.0.100-preview.5.25270.108 + 10.0.100-preview.5.25270.108 4.13.0-3.24613.7 @@ -170,12 +170,12 @@ 6.2.4 6.2.4 - 10.0.0-beta.25265.101 - 10.0.0-beta.25265.101 - 10.0.0-beta.25265.101 - 10.0.0-beta.25265.101 + 10.0.0-beta.25270.108 + 10.0.0-beta.25270.108 + 10.0.0-beta.25270.108 + 10.0.0-beta.25270.108 - 10.0.0-preview.25265.101 + 10.0.0-preview.25270.108 1.0.0-prerelease.25217.3 1.0.0-prerelease.25217.3 diff --git a/eng/build.ps1 b/eng/build.ps1 index 96bc05a6cbe0..6af494960f92 100644 --- a/eng/build.ps1 +++ b/eng/build.ps1 @@ -282,7 +282,7 @@ $MSBuildArguments += "/p:Publish=$Publish" $MSBuildArguments += "/p:TargetArchitecture=$Architecture" $MSBuildArguments += "/p:TargetOsName=win" -if ($ProductBuild) { $MSBuildArguments += "/p:DotNetBuildRepo=$ProductBuild" } +if ($ProductBuild) { $MSBuildArguments += "/p:DotNetBuild=$ProductBuild" } if (-not $Configuration) { $Configuration = if ($CI) { 'Release' } else { 'Debug' } @@ -298,7 +298,7 @@ if ($RuntimeSourceFeed -or $RuntimeSourceFeedKey) { $ToolsetBuildArguments += $runtimeFeedArg $ToolsetBuildArguments += $runtimeFeedKeyArg } -if ($ProductBuild) { $ToolsetBuildArguments += "/p:DotNetBuildRepo=$ProductBuild" } +if ($ProductBuild) { $ToolsetBuildArguments += "/p:DotNetBuild=$ProductBuild" } # Split build categories between dotnet msbuild and desktop msbuild. Use desktop msbuild as little as possible. [string[]]$dotnetBuildArguments = '' diff --git a/eng/build.sh b/eng/build.sh index 5bbb20c685c9..e18c217d4189 100755 --- a/eng/build.sh +++ b/eng/build.sh @@ -323,7 +323,7 @@ fi [ ! -z "$build_nodejs" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildNodeJSUnlessSourcebuild=$build_nodejs" [ ! -z "$build_managed" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildManaged=$build_managed" [ ! -z "$build_installers" ] && msbuild_args[${#msbuild_args[*]}]="-p:BuildInstallers=$build_installers" -[ ! -z "$product_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildRepo=$product_build" +[ ! -z "$product_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuild=$product_build" [ ! -z "$source_build" ] && msbuild_args[${#msbuild_args[*]}]="-p:DotNetBuildSourceOnly=$source_build" # Run restore by default unless --no-restore or --no-build was specified. @@ -361,7 +361,7 @@ if [ ! -z "$runtime_source_feed$runtime_source_feed_key" ]; then toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedArg toolset_build_args[${#toolset_build_args[*]}]=$runtimeFeedKeyArg fi -[ ! -z "$product_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildRepo=$product_build" +[ ! -z "$product_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuild=$product_build" [ ! -z "$source_build" ] && toolset_build_args[${#toolset_build_args[*]}]="-p:DotNetBuildSourceOnly=$source_build" # Initialize global variables need to be set before the import of Arcade is imported diff --git a/eng/common/build.ps1 b/eng/common/build.ps1 index 6b3be1916fca..ae2309e312d7 100644 --- a/eng/common/build.ps1 +++ b/eng/common/build.ps1 @@ -127,7 +127,7 @@ function Build { /p:Deploy=$deploy ` /p:Test=$test ` /p:Pack=$pack ` - /p:DotNetBuildRepo=$productBuild ` + /p:DotNetBuild=$productBuild ` /p:IntegrationTest=$integrationTest ` /p:PerformanceTest=$performanceTest ` /p:Sign=$sign ` diff --git a/eng/common/build.sh b/eng/common/build.sh index 27ae2c85601f..da906da20262 100755 --- a/eng/common/build.sh +++ b/eng/common/build.sh @@ -129,14 +129,14 @@ while [[ $# > 0 ]]; do -pack) pack=true ;; - -sourcebuild|-sb) + -sourcebuild|-source-build|-sb) build=true source_build=true product_build=true restore=true pack=true ;; - -productbuild|-pb) + -productbuild|-product-build|-pb) build=true product_build=true restore=true @@ -241,7 +241,7 @@ function Build { /p:RepoRoot="$repo_root" \ /p:Restore=$restore \ /p:Build=$build \ - /p:DotNetBuildRepo=$product_build \ + /p:DotNetBuild=$product_build \ /p:DotNetBuildSourceOnly=$source_build \ /p:Rebuild=$rebuild \ /p:Test=$test \ diff --git a/eng/common/templates/steps/vmr-sync.yml b/eng/common/templates/steps/vmr-sync.yml new file mode 100644 index 000000000000..599afb6186b8 --- /dev/null +++ b/eng/common/templates/steps/vmr-sync.yml @@ -0,0 +1,207 @@ +### These steps synchronize new code from product repositories into the VMR (https://github.com/dotnet/dotnet). +### They initialize the darc CLI and pull the new updates. +### Changes are applied locally onto the already cloned VMR (located in $vmrPath). + +parameters: +- name: targetRef + displayName: Target revision in dotnet/ to synchronize + type: string + default: $(Build.SourceVersion) + +- name: vmrPath + displayName: Path where the dotnet/dotnet is checked out to + type: string + default: $(Agent.BuildDirectory)/vmr + +- name: additionalSyncs + displayName: Optional list of package names whose repo's source will also be synchronized in the local VMR, e.g. NuGet.Protocol + type: object + default: [] + +steps: +- checkout: vmr + displayName: Clone dotnet/dotnet + path: vmr + clean: true + +- checkout: self + displayName: Clone $(Build.Repository.Name) + path: repo + fetchDepth: 0 + +# This step is needed so that when we get a detached HEAD / shallow clone, +# we still pull the commit into the temporary repo clone to use it during the sync. +# Also unshallow the clone so that forwardflow command would work. +- script: | + git branch repo-head + git rev-parse HEAD + displayName: Label PR commit + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + vmr_sha=$(grep -oP '(?<=Sha=")[^"]*' $(Agent.BuildDirectory)/repo/eng/Version.Details.xml) + echo "##vso[task.setvariable variable=vmr_sha]$vmr_sha" + displayName: Obtain the vmr sha from Version.Details.xml (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- powershell: | + [xml]$xml = Get-Content -Path $(Agent.BuildDirectory)/repo/eng/Version.Details.xml + $vmr_sha = $xml.SelectSingleNode("//Source").Sha + Write-Output "##vso[task.setvariable variable=vmr_sha]$vmr_sha" + displayName: Obtain the vmr sha from Version.Details.xml (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git fetch --all + git checkout $(vmr_sha) + displayName: Checkout VMR at correct sha for repo flow + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + git config --global user.name "dotnet-maestro[bot]" + git config --global user.email "dotnet-maestro[bot]@users.noreply.github.com" + displayName: Set git author to dotnet-maestro[bot] + workingDirectory: ${{ parameters.vmrPath }} + +- script: | + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync repo into VMR (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- script: | + git config --global diff.astextplain.textconv echo + git config --system core.longpaths true + displayName: Configure Windows git (longpaths, astextplain) + condition: eq(variables['Agent.OS'], 'Windows_NT') + +- powershell: | + ./eng/common/vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync repo into VMR (Windows) + condition: eq(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + +- ${{ if eq(variables['Build.Reason'], 'PullRequest') }}: + - task: CopyFiles@2 + displayName: Collect failed patches + condition: failed() + inputs: + SourceFolder: '$(Agent.TempDirectory)' + Contents: '*.patch' + TargetFolder: '$(Build.ArtifactStagingDirectory)/FailedPatches' + + - publish: '$(Build.ArtifactStagingDirectory)/FailedPatches' + artifact: $(System.JobDisplayName)_FailedPatches + displayName: Upload failed patches + condition: failed() + +- ${{ each assetName in parameters.additionalSyncs }}: + # The vmr-sync script ends up staging files in the local VMR so we have to commit those + - script: + git commit --allow-empty -am "Forward-flow $(Build.Repository.Name)" + displayName: Commit local VMR changes + workingDirectory: ${{ parameters.vmrPath }} + + - script: | + set -ex + + echo "Searching for details of asset ${{ assetName }}..." + + # Use darc to get dependencies information + dependencies=$(./.dotnet/dotnet darc get-dependencies --name '${{ assetName }}' --ci) + + # Extract repository URL and commit hash + repository=$(echo "$dependencies" | grep 'Repo:' | sed 's/Repo:[[:space:]]*//' | head -1) + + if [ -z "$repository" ]; then + echo "##vso[task.logissue type=error]Asset ${{ assetName }} not found in the dependency list" + exit 1 + fi + + commit=$(echo "$dependencies" | grep 'Commit:' | sed 's/Commit:[[:space:]]*//' | head -1) + + echo "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + ./eng/common/vmr-sync.sh \ + --vmr ${{ parameters.vmrPath }} \ + --tmp $(Agent.TempDirectory) \ + --azdev-pat '$(dn-bot-all-orgs-code-r)' \ + --ci \ + --debug + + if [ "$?" -ne 0 ]; then + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + fi + displayName: Sync ${{ assetName }} into (Unix) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo + + - powershell: | + $ErrorActionPreference = 'Stop' + + Write-Host "Searching for details of asset ${{ assetName }}..." + + $dependencies = .\.dotnet\dotnet darc get-dependencies --name '${{ assetName }}' --ci + + $repository = $dependencies | Select-String -Pattern 'Repo:\s+([^\s]+)' | Select-Object -First 1 + $repository -match 'Repo:\s+([^\s]+)' | Out-Null + $repository = $matches[1] + + if ($repository -eq $null) { + Write-Error "Asset ${{ assetName }} not found in the dependency list" + exit 1 + } + + $commit = $dependencies | Select-String -Pattern 'Commit:\s+([^\s]+)' | Select-Object -First 1 + $commit -match 'Commit:\s+([^\s]+)' | Out-Null + $commit = $matches[1] + + Write-Host "Updating the VMR from $repository / $commit..." + cd .. + git clone $repository ${{ assetName }} + cd ${{ assetName }} + git checkout $commit + git branch "sync/$commit" + + .\eng\common\vmr-sync.ps1 ` + -vmr ${{ parameters.vmrPath }} ` + -tmp $(Agent.TempDirectory) ` + -azdevPat '$(dn-bot-all-orgs-code-r)' ` + -ci ` + -debugOutput + + if ($LASTEXITCODE -ne 0) { + echo "##vso[task.logissue type=error]Failed to synchronize the VMR" + exit 1 + } + displayName: Sync ${{ assetName }} into (Windows) + condition: ne(variables['Agent.OS'], 'Windows_NT') + workingDirectory: $(Agent.BuildDirectory)/repo diff --git a/eng/common/templates/vmr-build-pr.yml b/eng/common/templates/vmr-build-pr.yml new file mode 100644 index 000000000000..670cf32c3bd1 --- /dev/null +++ b/eng/common/templates/vmr-build-pr.yml @@ -0,0 +1,33 @@ +trigger: none +pr: + branches: + include: + - main + - release/* + paths: + exclude: + - documentation/* + - README.md + - CODEOWNERS + +variables: +- template: /eng/common/templates/variables/pool-providers.yml@self + +- name: skipComponentGovernanceDetection # we run CG on internal builds only + value: true + +- name: Codeql.Enabled # we run CodeQL on internal builds only + value: false + +resources: + repositories: + - repository: vmr + type: github + name: dotnet/dotnet + endpoint: dotnet + +stages: +- template: /eng/pipelines/templates/stages/vmr-build.yml@vmr + parameters: + isBuiltFromVmr: false + scope: lite diff --git a/eng/common/vmr-sync.ps1 b/eng/common/vmr-sync.ps1 new file mode 100755 index 000000000000..8c3c91ce8ded --- /dev/null +++ b/eng/common/vmr-sync.ps1 @@ -0,0 +1,138 @@ +<# +.SYNOPSIS + +This script is used for synchronizing the current repository into a local VMR. +It pulls the current repository's code into the specified VMR directory for local testing or +Source-Build validation. + +.DESCRIPTION + +The tooling used for synchronization will clone the VMR repository into a temporary folder if +it does not already exist. These clones can be reused in future synchronizations, so it is +recommended to dedicate a folder for this to speed up re-runs. + +.EXAMPLE + Synchronize current repository into a local VMR: + ./vmr-sync.ps1 -vmrDir "$HOME/repos/dotnet" -tmpDir "$HOME/repos/tmp" + +.PARAMETER tmpDir +Required. Path to the temporary folder where repositories will be cloned + +.PARAMETER vmrBranch +Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch + +.PARAMETER azdevPat +Optional. Azure DevOps PAT to use for cloning private repositories. + +.PARAMETER vmrDir +Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +.PARAMETER debugOutput +Optional. Enables debug logging in the darc vmr command. + +.PARAMETER ci +Optional. Denotes that the script is running in a CI environment. +#> +param ( + [Parameter(Mandatory=$true, HelpMessage="Path to the temporary folder where repositories will be cloned")] + [string][Alias('t', 'tmp')]$tmpDir, + [string][Alias('b', 'branch')]$vmrBranch, + [string]$remote, + [string]$azdevPat, + [string][Alias('v', 'vmr')]$vmrDir, + [switch]$ci, + [switch]$debugOutput +) + +function Fail { + Write-Host "> $($args[0])" -ForegroundColor 'Red' +} + +function Highlight { + Write-Host "> $($args[0])" -ForegroundColor 'Cyan' +} + +$verbosity = 'verbose' +if ($debugOutput) { + $verbosity = 'debug' +} +# Validation + +if (-not $tmpDir) { + Fail "Missing -tmpDir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +} + +# Sanitize the input + +if (-not $vmrDir) { + $vmrDir = Join-Path $tmpDir 'dotnet' +} + +if (-not (Test-Path -Path $tmpDir -PathType Container)) { + New-Item -ItemType Directory -Path $tmpDir | Out-Null +} + +# Prepare the VMR + +if (-not (Test-Path -Path $vmrDir -PathType Container)) { + Highlight "Cloning 'dotnet/dotnet' into $vmrDir.." + git clone https://github.com/dotnet/dotnet $vmrDir + + if ($vmrBranch) { + git -C $vmrDir switch -c $vmrBranch + } +} +else { + if ((git -C $vmrDir diff --quiet) -eq $false) { + Fail "There are changes in the working tree of $vmrDir. Please commit or stash your changes" + exit 1 + } + + if ($vmrBranch) { + Highlight "Preparing $vmrDir" + git -C $vmrDir checkout $vmrBranch + git -C $vmrDir pull + } +} + +Set-StrictMode -Version Latest + +# Prepare darc + +Highlight 'Installing .NET, preparing the tooling..' +. .\eng\common\tools.ps1 +$dotnetRoot = InitializeDotNetCli -install:$true +$dotnet = "$dotnetRoot\dotnet.exe" +& "$dotnet" tool restore + +Highlight "Starting the synchronization of VMR.." + +# Synchronize the VMR +$darcArgs = ( + "darc", "vmr", "forwardflow", + "--tmp", $tmpDir, + "--$verbosity", + $vmrDir +) + +if ($ci) { + $darcArgs += ("--ci") +} + +if ($azdevPat) { + $darcArgs += ("--azdev-pat", $azdevPat) +} + +& "$dotnet" $darcArgs + +if ($LASTEXITCODE -eq 0) { + Highlight "Synchronization succeeded" +} +else { + Fail "Synchronization of repo to VMR failed!" + Fail "'$vmrDir' is left in its last state (re-run of this script will reset it)." + Fail "Please inspect the logs which contain path to the failing patch file (use -debugOutput to get all the details)." + Fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 +} diff --git a/eng/common/vmr-sync.sh b/eng/common/vmr-sync.sh new file mode 100755 index 000000000000..86d77ccf5b48 --- /dev/null +++ b/eng/common/vmr-sync.sh @@ -0,0 +1,205 @@ +#!/bin/bash + +### This script is used for synchronizing the current repository into a local VMR. +### It pulls the current repository's code into the specified VMR directory for local testing or +### Source-Build validation. +### +### The tooling used for synchronization will clone the VMR repository into a temporary folder if +### it does not already exist. These clones can be reused in future synchronizations, so it is +### recommended to dedicate a folder for this to speed up re-runs. +### +### USAGE: +### Synchronize current repository into a local VMR: +### ./vmr-sync.sh --tmp "$HOME/repos/tmp" "$HOME/repos/dotnet" +### +### Options: +### -t, --tmp, --tmp-dir PATH +### Required. Path to the temporary folder where repositories will be cloned +### +### -b, --branch, --vmr-branch BRANCH_NAME +### Optional. Branch of the 'dotnet/dotnet' repo to synchronize. The VMR will be checked out to this branch +### +### --debug +### Optional. Turns on the most verbose logging for the VMR tooling +### +### --remote name:URI +### Optional. Additional remote to use during the synchronization +### This can be used to synchronize to a commit from a fork of the repository +### Example: 'runtime:https://github.com/yourfork/runtime' +### +### --azdev-pat +### Optional. Azure DevOps PAT to use for cloning private repositories. +### +### -v, --vmr, --vmr-dir PATH +### Optional. Path to the dotnet/dotnet repository. When null, gets cloned to the temporary folder + +source="${BASH_SOURCE[0]}" + +# resolve $source until the file is no longer a symlink +while [[ -h "$source" ]]; do + scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + source="$(readlink "$source")" + # if $source was a relative symlink, we need to resolve it relative to the path where the + # symlink file was located + [[ $source != /* ]] && source="$scriptroot/$source" +done +scriptroot="$( cd -P "$( dirname "$source" )" && pwd )" + +function print_help () { + sed -n '/^### /,/^$/p' "$source" | cut -b 5- +} + +COLOR_RED=$(tput setaf 1 2>/dev/null || true) +COLOR_CYAN=$(tput setaf 6 2>/dev/null || true) +COLOR_CLEAR=$(tput sgr0 2>/dev/null || true) +COLOR_RESET=uniquesearchablestring +FAILURE_PREFIX='> ' + +function fail () { + echo "${COLOR_RED}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_RED}}${COLOR_CLEAR}" >&2 +} + +function highlight () { + echo "${COLOR_CYAN}$FAILURE_PREFIX${1//${COLOR_RESET}/${COLOR_CYAN}}${COLOR_CLEAR}" +} + +tmp_dir='' +vmr_dir='' +vmr_branch='' +additional_remotes='' +verbosity=verbose +azdev_pat='' +ci=false + +while [[ $# -gt 0 ]]; do + opt="$(echo "$1" | tr "[:upper:]" "[:lower:]")" + case "$opt" in + -t|--tmp|--tmp-dir) + tmp_dir=$2 + shift + ;; + -v|--vmr|--vmr-dir) + vmr_dir=$2 + shift + ;; + -b|--branch|--vmr-branch) + vmr_branch=$2 + shift + ;; + --remote) + additional_remotes="$additional_remotes $2" + shift + ;; + --azdev-pat) + azdev_pat=$2 + shift + ;; + --ci) + ci=true + ;; + -d|--debug) + verbosity=debug + ;; + -h|--help) + print_help + exit 0 + ;; + *) + fail "Invalid argument: $1" + print_help + exit 1 + ;; + esac + + shift +done + +# Validation + +if [[ -z "$tmp_dir" ]]; then + fail "Missing --tmp-dir argument. Please specify the path to the temporary folder where the repositories will be cloned" + exit 1 +fi + +# Sanitize the input + +if [[ -z "$vmr_dir" ]]; then + vmr_dir="$tmp_dir/dotnet" +fi + +if [[ ! -d "$tmp_dir" ]]; then + mkdir -p "$tmp_dir" +fi + +if [[ "$verbosity" == "debug" ]]; then + set -x +fi + +# Prepare the VMR + +if [[ ! -d "$vmr_dir" ]]; then + highlight "Cloning 'dotnet/dotnet' into $vmr_dir.." + git clone https://github.com/dotnet/dotnet "$vmr_dir" + + if [[ -n "$vmr_branch" ]]; then + git -C "$vmr_dir" switch -c "$vmr_branch" + fi +else + if ! git -C "$vmr_dir" diff --quiet; then + fail "There are changes in the working tree of $vmr_dir. Please commit or stash your changes" + exit 1 + fi + + if [[ -n "$vmr_branch" ]]; then + highlight "Preparing $vmr_dir" + git -C "$vmr_dir" checkout "$vmr_branch" + git -C "$vmr_dir" pull + fi +fi + +set -e + +# Prepare darc + +highlight 'Installing .NET, preparing the tooling..' +source "./eng/common/tools.sh" +InitializeDotNetCli true +dotnetDir=$( cd ./.dotnet/; pwd -P ) +dotnet=$dotnetDir/dotnet +"$dotnet" tool restore + +highlight "Starting the synchronization of VMR.." +set +e + +if [[ -n "$additional_remotes" ]]; then + additional_remotes="--additional-remotes $additional_remotes" +fi + +if [[ -n "$azdev_pat" ]]; then + azdev_pat="--azdev-pat $azdev_pat" +fi + +ci_arg='' +if [[ "$ci" == "true" ]]; then + ci_arg="--ci" +fi + +# Synchronize the VMR + +"$dotnet" darc vmr forwardflow \ + --tmp "$tmp_dir" \ + $azdev_pat \ + --$verbosity \ + $ci_arg \ + $additional_remotes \ + "$vmr_dir" + +if [[ $? == 0 ]]; then + highlight "Synchronization succeeded" +else + fail "Synchronization of repo to VMR failed!" + fail "'$vmr_dir' is left in its last state (re-run of this script will reset it)." + fail "Please inspect the logs which contain path to the failing patch file (use --debug to get all the details)." + fail "Once you make changes to the conflicting VMR patch, commit it locally and re-run this script." + exit 1 +fi diff --git a/eng/configure-toolset.sh b/eng/configure-toolset.sh index 4d6e51f58de1..776adaa0d0a2 100755 --- a/eng/configure-toolset.sh +++ b/eng/configure-toolset.sh @@ -2,7 +2,7 @@ # We could potentially try to find an existing installation that has all the required runtimes, # but it's unlikely one will be available. -if [ "${DotNetBuild:-false}" = false ]; then +if [ "$product_build" = false ]; then use_installed_dotnet_cli="false" fi diff --git a/eng/tools/GenerateFiles/Directory.Build.targets.in b/eng/tools/GenerateFiles/Directory.Build.targets.in index fb93cb806019..c63b8b21c92d 100644 --- a/eng/tools/GenerateFiles/Directory.Build.targets.in +++ b/eng/tools/GenerateFiles/Directory.Build.targets.in @@ -64,7 +64,7 @@ - + ${MicrosoftNETCoreAppRefVersion} @@ -84,7 +84,7 @@ %(RuntimePackRuntimeIdentifiers);$(TargetRuntimeIdentifier) - + ${MicrosoftNETCoreAppRefVersion} diff --git a/global.json b/global.json index fb35fa5b26ca..7e3e135d091d 100644 --- a/global.json +++ b/global.json @@ -1,9 +1,9 @@ { "sdk": { - "version": "10.0.100-preview.4.25216.37" + "version": "10.0.100-preview.5.25265.106" }, "tools": { - "dotnet": "10.0.100-preview.4.25216.37", + "dotnet": "10.0.100-preview.5.25265.106", "runtimes": { "dotnet/x86": [ "$(MicrosoftInternalRuntimeAspNetCoreTransportVersion)" @@ -27,9 +27,9 @@ "jdk": "latest" }, "msbuild-sdks": { - "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25265.101", - "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25265.101", - "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25265.101", + "Microsoft.DotNet.Arcade.Sdk": "10.0.0-beta.25270.108", + "Microsoft.DotNet.Helix.Sdk": "10.0.0-beta.25270.108", + "Microsoft.DotNet.SharedFramework.Sdk": "10.0.0-beta.25270.108", "Microsoft.Build.NoTargets": "3.7.0", "Microsoft.Build.Traversal": "3.4.0" } diff --git a/src/Framework/test/TestData.cs b/src/Framework/test/TestData.cs index 6d7176d53b31..9c052bda0e51 100644 --- a/src/Framework/test/TestData.cs +++ b/src/Framework/test/TestData.cs @@ -157,6 +157,7 @@ static TestData() "System.Diagnostics.EventLog.Messages", "System.Security.Cryptography.Pkcs", "System.Security.Cryptography.Xml", + "System.Threading.AccessControl", "System.Threading.RateLimiting", }; @@ -306,6 +307,7 @@ static TestData() { "Microsoft.Net.Http.Headers" }, { "System.Diagnostics.EventLog" }, { "System.Security.Cryptography.Xml" }, + { "System.Threading.AccessControl" }, { "System.Threading.RateLimiting" }, }; diff --git a/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs b/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs index 00481689ce09..ba2bb10c0ac1 100644 --- a/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs +++ b/src/Hosting/Hosting/src/Internal/WebHostLifetime.cs @@ -1,6 +1,8 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. +using System.Runtime.InteropServices; + namespace Microsoft.AspNetCore.Hosting; internal sealed class WebHostLifetime : IDisposable @@ -9,8 +11,11 @@ internal sealed class WebHostLifetime : IDisposable private readonly ManualResetEventSlim _resetEvent; private readonly string _shutdownMessage; + private readonly PosixSignalRegistration _sigIntRegistration; + private readonly PosixSignalRegistration _sigQuitRegistration; + private readonly PosixSignalRegistration _sigTermRegistration; + private bool _disposed; - private bool _exitedGracefully; public WebHostLifetime(CancellationTokenSource cts, ManualResetEventSlim resetEvent, string shutdownMessage) { @@ -18,13 +23,10 @@ public WebHostLifetime(CancellationTokenSource cts, ManualResetEventSlim resetEv _resetEvent = resetEvent; _shutdownMessage = shutdownMessage; - AppDomain.CurrentDomain.ProcessExit += ProcessExit; - Console.CancelKeyPress += CancelKeyPress; - } - - internal void SetExitedGracefully() - { - _exitedGracefully = true; + Action handler = HandlePosixSignal; + _sigIntRegistration = PosixSignalRegistration.Create(PosixSignal.SIGINT, handler); + _sigQuitRegistration = PosixSignalRegistration.Create(PosixSignal.SIGQUIT, handler); + _sigTermRegistration = PosixSignalRegistration.Create(PosixSignal.SIGTERM, handler); } public void Dispose() @@ -35,26 +37,18 @@ public void Dispose() } _disposed = true; - AppDomain.CurrentDomain.ProcessExit -= ProcessExit; - Console.CancelKeyPress -= CancelKeyPress; - } - private void CancelKeyPress(object? sender, ConsoleCancelEventArgs eventArgs) - { - Shutdown(); - // Don't terminate the process immediately, wait for the Main thread to exit gracefully. - eventArgs.Cancel = true; + _sigIntRegistration.Dispose(); + _sigQuitRegistration.Dispose(); + _sigTermRegistration.Dispose(); } - private void ProcessExit(object? sender, EventArgs eventArgs) + private void HandlePosixSignal(PosixSignalContext context) { Shutdown(); - if (_exitedGracefully) - { - // On Linux if the shutdown is triggered by SIGTERM then that's signaled with the 143 exit code. - // Suppress that since we shut down gracefully. https://github.com/dotnet/aspnetcore/issues/6526 - Environment.ExitCode = 0; - } + + // Don't terminate the process immediately, wait for the Main thread to exit gracefully. + context.Cancel = true; } private void Shutdown() diff --git a/src/Hosting/Hosting/src/WebHostExtensions.cs b/src/Hosting/Hosting/src/WebHostExtensions.cs index 1d4d115f904d..41c8e385d141 100644 --- a/src/Hosting/Hosting/src/WebHostExtensions.cs +++ b/src/Hosting/Hosting/src/WebHostExtensions.cs @@ -52,7 +52,6 @@ public static async Task WaitForShutdownAsync(this IWebHost host, CancellationTo try { await host.WaitForTokenShutdownAsync(cts.Token); - lifetime.SetExitedGracefully(); } finally { @@ -95,7 +94,6 @@ public static async Task RunAsync(this IWebHost host, CancellationToken token = try { await host.RunAsync(cts.Token, "Application started. Press Ctrl+C to shut down."); - lifetime.SetExitedGracefully(); } finally { diff --git a/src/Hosting/test/FunctionalTests/ShutdownTests.cs b/src/Hosting/test/FunctionalTests/ShutdownTests.cs index e366e632e72e..f639f8051238 100644 --- a/src/Hosting/test/FunctionalTests/ShutdownTests.cs +++ b/src/Hosting/test/FunctionalTests/ShutdownTests.cs @@ -97,7 +97,7 @@ private async Task ExecuteShutdownTest(string testName, string shutdownMechanic) throw new InvalidOperationException("Timeout while waiting for host process to output started message.", ex); } - SendSIGINT(deployer.HostProcess.Id); + SendSIGTERM(deployer.HostProcess.Id); WaitForExitOrKill(deployer.HostProcess); @@ -117,7 +117,7 @@ private async Task ExecuteShutdownTest(string testName, string shutdownMechanic) } } - private static void SendSIGINT(int processId) + private static void SendSIGTERM(int processId) { var startInfo = new ProcessStartInfo { diff --git a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj index ef46ff81213d..a456190bc234 100644 --- a/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj +++ b/src/Servers/IIS/IIS/src/Microsoft.AspNetCore.Server.IIS.csproj @@ -45,7 +45,7 @@ - +