From 73d8b3f7d258880c357f054613c1c3ce33df39e0 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Fri, 2 Sep 2022 20:57:54 +0000 Subject: [PATCH 1/6] Mono.ToolChain: WorkloadManifest.targets - Set runtime pack version even .. if no workload is installed. This ensures that the correct runtime pack version (intended by the installed manifest) is used even if the workload is not installed. --- .../WorkloadManifest.targets.in | 2 +- .../WorkloadManifest.targets.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest/WorkloadManifest.targets.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest/WorkloadManifest.targets.in index ed240a9ced181b..6f13276c2e7dd5 100644 --- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest/WorkloadManifest.targets.in +++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net6.Manifest/WorkloadManifest.targets.in @@ -97,7 +97,7 @@ - + <_MonoWorkloadTargetsMobile>true <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion6) diff --git a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in index 8063ce6554016e..c6b512e6c45165 100644 --- a/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in +++ b/src/mono/nuget/Microsoft.NET.Workload.Mono.Toolchain.net7.Manifest/WorkloadManifest.targets.in @@ -94,7 +94,7 @@ - + <_MonoWorkloadTargetsMobile>true <_MonoWorkloadRuntimePackPackageVersion>$(_RuntimePackInWorkloadVersion7) From 3644797114bb2ff931fa64a9eba452948bdf984d Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Fri, 2 Sep 2022 20:59:39 +0000 Subject: [PATCH 2/6] Improve incremental builds for workload installs used for testing --- eng/testing/workloads-testing.targets | 6 +++++- .../WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/eng/testing/workloads-testing.targets b/eng/testing/workloads-testing.targets index 0c41fc2bb5c5c7..537fa502c57e18 100644 --- a/eng/testing/workloads-testing.targets +++ b/eng/testing/workloads-testing.targets @@ -3,7 +3,9 @@ true + + <_SdkForWorkloadTestingBasePath>$(ArtifactsBinDir) <_SdkWithNoWorkloadPath>$([MSBuild]::NormalizeDirectory($(_SdkForWorkloadTestingBasePath), 'dotnet-none')) <_SdkWithNoWorkloadStampPath>$([MSBuild]::NormalizePath($(_SdkWithNoWorkloadPath), '.version-$(SdkVersionForWorkloadTesting).stamp')) @@ -190,7 +192,7 @@ + Outputs="@(_SdkWithWorkloadToInstall->'%(StampPath)');$(_SdkWithNoWorkloadStampPath)"> <_BuiltNuGets Include="$(LibrariesShippingPackagesDir)\*.nupkg" /> @@ -205,5 +207,7 @@ TemplateNuGetConfigPath="$(RepoRoot)NuGet.config" SdkWithNoWorkloadInstalledPath="$(_SdkWithNoWorkloadPath)" /> + + diff --git a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs index 1e77d5905f5a9b..f4763c1b76115f 100644 --- a/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs +++ b/src/tasks/WorkloadBuildTasks/InstallWorkloadFromArtifacts.cs @@ -97,6 +97,8 @@ public override bool Execute() if (!ExecuteInternal(req) && !req.IgnoreErrors) return false; + + File.WriteAllText(req.StampPath, string.Empty); } return !Log.HasLoggedErrors; @@ -399,6 +401,7 @@ internal sealed record InstallWorkloadRequest( public string ManifestName => Workload.GetMetadata("ManifestName"); public string Version => Workload.GetMetadata("Version"); public string TargetPath => Target.GetMetadata("InstallPath"); + public string StampPath => Target.GetMetadata("StampPath"); public bool IgnoreErrors => Workload.GetMetadata("IgnoreErrors").ToLowerInvariant() == "true"; public string WorkloadId => Workload.ItemSpec; From f598f687ba7c2c577c8461dce6015af7d0259fdd Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Fri, 2 Sep 2022 21:01:44 +0000 Subject: [PATCH 3/6] [wasm] Add a check for blazor projects, to confirm that the correct .. runtime pack version is being used. To use the locally built runtime pack without the workload, we need the nuget, so we use that from the artifacts. --- .../BlazorWasmBuildPublishTests.cs | 2 +- .../Wasm.Build.Tests/BuildEnvironment.cs | 7 ++++++- .../Wasm.Build.Tests/BuildTestBase.cs | 16 +++++++++++++- .../Wasm.Build.Tests/EnvironmentVariables.cs | 1 + .../Wasm.Build.Tests/Wasm.Build.Tests.csproj | 5 ++++- .../data/Blazor.Directory.Build.targets | 21 ++++++++++++++++++- .../Wasm.Build.Tests/data/nuget7.config | 1 + 7 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs index f034d2fcc40a8f..8123c9cfc1c9ed 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BlazorWasmBuildPublishTests.cs @@ -21,7 +21,7 @@ public BlazorWasmBuildPublishTests(ITestOutputHelper output, SharedBuildPerTestC _enablePerTestCleanup = true; } - [Theory] + [Theory, TestCategory("no-workload")] [InlineData("Debug")] [InlineData("Release")] public void DefaultTemplate_WithoutWorkload(string config) diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs index abe5e102bc686e..8ce212003ab122 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildEnvironment.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Reflection; using System.Runtime.InteropServices; #nullable enable @@ -25,6 +24,7 @@ public class BuildEnvironment public string LogRootPath { get; init; } public string WorkloadPacksDir { get; init; } + public string BuiltNuGetsPath { get; init; } public static readonly string RelativeTestAssetsPath = @"..\testassets\"; public static readonly string TestAssetsPath = Path.Combine(AppContext.BaseDirectory, "testassets"); @@ -99,6 +99,11 @@ public BuildEnvironment() DirectoryBuildTargetsContents = s_directoryBuildTargetsForLocal; } + if (EnvironmentVariables.BuiltNuGetsPath is null || !Directory.Exists(EnvironmentVariables.BuiltNuGetsPath)) + throw new Exception($"Cannot find 'BUILT_NUGETS_PATH={EnvironmentVariables.BuiltNuGetsPath}'"); + + BuiltNuGetsPath = EnvironmentVariables.BuiltNuGetsPath; + // `runtime` repo's build environment sets these, and they // mess up the build for the test project, which is using a different // dotnet diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs index c2b64f790444bd..3acad2d8f5047a 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs @@ -41,6 +41,7 @@ public abstract class BuildTestBase : IClassFixture"); + } + public string CreateWasmTemplateProject(string id, string template = "wasmbrowser") { InitPaths(id); diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs index a2439797566848..937367e68fe43d 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs @@ -16,5 +16,6 @@ internal static class EnvironmentVariables internal static readonly string? TestLogPath = Environment.GetEnvironmentVariable("TEST_LOG_PATH"); internal static readonly string? SkipProjectCleanup = Environment.GetEnvironmentVariable("SKIP_PROJECT_CLEANUP"); internal static readonly string? XHarnessCliPath = Environment.GetEnvironmentVariable("XHARNESS_CLI_PATH"); + internal static readonly string? BuiltNuGetsPath = Environment.GetEnvironmentVariable("BUILT_NUGETS_PATH"); } } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj b/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj index a56ba59191d845..8c7ad904c26ebd 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/Wasm.Build.Tests.csproj @@ -56,7 +56,7 @@ - + <_XUnitTraitArg Condition="'$(TestUsingWorkloads)' == 'true'">-notrait category=no-workload <_XUnitTraitArg Condition="'$(TestUsingWorkloads)' != 'true'">-trait category=no-workload @@ -69,6 +69,9 @@ + + + diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets index b2b875fd8449ce..419a6d48046ba0 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/Blazor.Directory.Build.targets @@ -3,7 +3,26 @@ - + + + + + + + + + + + + diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config index d6de05ad43dddc..e7ad45f78b8cab 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/data/nuget7.config @@ -7,6 +7,7 @@ + From 2b48d1168af8428df3f040c4d14bea0b04654004 Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Fri, 2 Sep 2022 21:04:05 +0000 Subject: [PATCH 4/6] [wasm] Add built nugets as payload for WBT --- src/libraries/sendtohelix-wasm.targets | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libraries/sendtohelix-wasm.targets b/src/libraries/sendtohelix-wasm.targets index acf037e988b272..341211e79fb44f 100644 --- a/src/libraries/sendtohelix-wasm.targets +++ b/src/libraries/sendtohelix-wasm.targets @@ -56,6 +56,7 @@ true true true + true true false @@ -121,6 +122,9 @@ + + + @@ -187,6 +191,10 @@ + + + + Date: Sat, 3 Sep 2022 00:11:20 +0000 Subject: [PATCH 5/6] Fix built-nugets payload --- src/libraries/sendtohelix-wasm.targets | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/libraries/sendtohelix-wasm.targets b/src/libraries/sendtohelix-wasm.targets index 341211e79fb44f..82b14495dd5267 100644 --- a/src/libraries/sendtohelix-wasm.targets +++ b/src/libraries/sendtohelix-wasm.targets @@ -26,6 +26,7 @@ $([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'src', 'mono', 'wasm', 'build')) $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'NetCoreServer', '$(Configuration)', '$(AspNetCoreAppCurrent)')) $([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'bin', 'RemoteLoopServer', '$(Configuration)', '$(AspNetCoreAppCurrent)')) + <_ShippingPackagesPath>$([MSBuild]::NormalizeDirectory($(ArtifactsDir), 'packages', $(Configuration), 'Shipping')) $(DebuggerHost)- $(Scenario)- @@ -193,7 +194,7 @@ - + From 2d269512348f3b66ab2263b8c0bd17dec3071b9b Mon Sep 17 00:00:00 2001 From: Ankit Jain Date: Sat, 3 Sep 2022 00:20:23 +0000 Subject: [PATCH 6/6] [wasm] Allow setting browser path for use with xharness via envvar --- .../Wasm.Build.Tests/BuildTestBase.cs | 22 ++++++++++++++----- .../Wasm.Build.Tests/EnvironmentVariables.cs | 1 + 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs index 3acad2d8f5047a..659075cc69d9d7 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/BuildTestBase.cs @@ -214,6 +214,16 @@ protected static string RunWithXHarness(string testCommand, string testLogPath, args.Append($" --expected-exit-code={expectedAppExitCode}"); args.Append($" {extraXHarnessArgs ?? string.Empty}"); + if (File.Exists("/.dockerenv")) + args.Append(" --browser-arg=--no-sandbox"); + + if (!string.IsNullOrEmpty(EnvironmentVariables.BrowserPathForTests)) + { + if (!File.Exists(EnvironmentVariables.BrowserPathForTests)) + throw new Exception($"Cannot find BROWSER_PATH_FOR_TESTS={EnvironmentVariables.BrowserPathForTests}"); + args.Append($" --browser-path=\"{EnvironmentVariables.BrowserPathForTests}\""); + } + args.Append(" -- "); if (extraXHarnessMonoArgs != null) { @@ -326,7 +336,8 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp { _testOutput.WriteLine ($"Using existing build found at {product.ProjectDir}, with build log at {product.LogFile}"); - Assert.True(product.Result, $"Found existing build at {product.ProjectDir}, but it had failed. Check build log at {product.LogFile}"); + if (!product.Result) + throw new XunitException($"Found existing build at {product.ProjectDir}, but it had failed. Check build log at {product.LogFile}"); _projectDir = product.ProjectDir; // use this test's id for the run logs @@ -360,7 +371,6 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp string logFilePath = Path.Combine(_logPath, $"{buildArgs.ProjectName}{logFileSuffix}.binlog"); _testOutput.WriteLine($"-------- Building ---------"); _testOutput.WriteLine($"Binlog path: {logFilePath}"); - _testOutput.WriteLine($"Binlog path: {logFilePath}"); sb.Append($" /bl:\"{logFilePath}\" /nologo"); sb.Append($" /v:{options.Verbosity ?? "minimal"}"); if (buildArgs.ExtraBuildArgs != null) @@ -650,10 +660,10 @@ protected static void AssertFile(string file0, string file1, string? label=null, protected (int exitCode, string buildOutput) AssertBuild(string args, string label="build", bool expectSuccess=true, IDictionary? envVars=null, int? timeoutMs=null) { var result = RunProcess(s_buildEnv.DotNet, _testOutput, args, workingDir: _projectDir, label: label, envVars: envVars, timeoutMs: timeoutMs ?? s_defaultPerTestTimeoutMs); - if (expectSuccess) - Assert.True(0 == result.exitCode, $"Build process exited with non-zero exit code: {result.exitCode}"); - else - Assert.True(0 != result.exitCode, $"Build should have failed, but it didn't. Process exited with exitCode : {result.exitCode}"); + if (expectSuccess && result.exitCode != 0) + throw new XunitException($"Build process exited with non-zero exit code: {result.exitCode}"); + if (!expectSuccess && result.exitCode == 0) + throw new XunitException($"Build should have failed, but it didn't. Process exited with exitCode : {result.exitCode}"); return result; } diff --git a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs index 937367e68fe43d..87589af53f491b 100644 --- a/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs +++ b/src/tests/BuildWasmApps/Wasm.Build.Tests/EnvironmentVariables.cs @@ -17,5 +17,6 @@ internal static class EnvironmentVariables internal static readonly string? SkipProjectCleanup = Environment.GetEnvironmentVariable("SKIP_PROJECT_CLEANUP"); internal static readonly string? XHarnessCliPath = Environment.GetEnvironmentVariable("XHARNESS_CLI_PATH"); internal static readonly string? BuiltNuGetsPath = Environment.GetEnvironmentVariable("BUILT_NUGETS_PATH"); + internal static readonly string? BrowserPathForTests = Environment.GetEnvironmentVariable("BROWSER_PATH_FOR_TESTS"); } }