Skip to content
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

[wasm] Wasm.Build.Tests - use the new sdk with templates #85498

Closed
wants to merge 15 commits into from
7 changes: 7 additions & 0 deletions eng/testing/workloads-testing.targets
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,13 @@
<Exec Condition="$([MSBuild]::IsOSPlatform('windows'))"
Command='powershell -ExecutionPolicy ByPass -NoProfile -command "&amp; $(_DotNetInstallCommand)"' />

<ItemGroup>
<_WasmSdkProps Include="$(_SdkWithNoWorkloadPath)\sdk\**\Microsoft.NET.Sdk.WebAssembly\Sdk\Sdk.props" />
<_WasmSdkTargets Include="$(_SdkWithNoWorkloadPath)\sdk\**\Microsoft.NET.Sdk.WebAssembly\Sdk\Sdk.targets" />
</ItemGroup>
<Copy SourceFiles="$(RepoRoot)src\mono\wasm\Wasm.Build.Tests\WasmSdk.props" DestinationFiles="@(_WasmSdkProps)" />
<Copy SourceFiles="$(RepoRoot)src\mono\wasm\Wasm.Build.Tests\WasmSdk.targets" DestinationFiles="@(_WasmSdkTargets)" />

<!-- HACK: Remove the now invalid manifest `microsoft.net.workload.mono.toolchain` as a workaround
till the sdk removes it completely. -->
<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,5 @@ Copyright (c) .NET Foundation. All rights reserved.
<_WebAssemblyPropsFile>$(MSBuildThisFileDirectory)\Microsoft.NET.Sdk.WebAssembly.Browser.props</_WebAssemblyPropsFile>
<_WebAssemblyTargetsFile>$(MSBuildThisFileDirectory)\Microsoft.NET.Sdk.WebAssembly.Browser.targets</_WebAssemblyTargetsFile>
</PropertyGroup>
<Import Project="$(_WebAssemblyPropsFile)" />
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,6 @@ WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and
Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->
<Project ToolsVersion="14.0"></Project>
<Project ToolsVersion="14.0">
<Import Project="$(_WebAssemblyTargetsFile)" />
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -123,8 +123,8 @@
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
<Import Project="Sdk.props" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.WebAssembly.Sdk" />
<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" />
<!--<Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" />-->
<!--<Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" />-->
<Import Project="Sdk.props" Sdk="Microsoft.NETCore.App.Runtime.AOT.Cross.browser-wasm" />
<Import Project="Sdk.targets" Sdk="Microsoft.NET.Runtime.MonoTargets.Sdk" />
</ImportGroup>
Expand Down
56 changes: 37 additions & 19 deletions src/mono/wasm/Wasm.Build.Tests/BuildTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -374,16 +374,7 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp

if (options.CreateProject)
{
InitPaths(id);
InitProjectDir(_projectDir);
options.InitProject?.Invoke();

File.WriteAllText(Path.Combine(_projectDir, $"{buildArgs.ProjectName}.csproj"), buildArgs.ProjectFileContents);
File.Copy(Path.Combine(AppContext.BaseDirectory,
options.TargetFramework == "net8.0" ? "test-main.js" : "data/test-main-7.0.js"),
Path.Combine(_projectDir, "test-main.js"));

File.WriteAllText(Path.Combine(_projectDir!, "index.html"), @"<html><body><script type=""module"" src=""test-main.js""></script></body></html>");
CreateProject(id, buildArgs, options);
}
else if (_projectDir is null)
{
Expand Down Expand Up @@ -429,7 +420,8 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
AssertRuntimePackPath(result.buildOutput, options.TargetFramework ?? DefaultTargetFramework);

string bundleDir = GetBinDir(config: buildArgs.Config,
targetFramework: options.TargetFramework ?? DefaultTargetFramework);
targetFramework: options.TargetFramework ?? DefaultTargetFramework,
usesWasmSdk: options.IsTemplateUsingWasmSdk);

if (options.IsTemplateUsingWasmSdk)
bundleDir = Path.Combine(bundleDir, options.Publish ? "publish" : string.Empty, "wwwroot");
Expand All @@ -451,18 +443,43 @@ protected static BuildArgs ExpandBuildArgs(BuildArgs buildArgs, string extraProp
}

if (options.UseCache)
_buildContext.CacheBuild(buildArgs, new BuildProduct(_projectDir, logFilePath, true, result.buildOutput));
_buildContext.CacheBuild(buildArgs, new BuildProduct(_projectDir!, logFilePath, true, result.buildOutput));

return (_projectDir, result.buildOutput);
return (_projectDir!, result.buildOutput);
}
catch (Exception ex)
{
if (options.UseCache)
_buildContext.CacheBuild(buildArgs, new BuildProduct(_projectDir, logFilePath, false, $"The build attempt resulted in exception: {ex}."));
_buildContext.CacheBuild(buildArgs, new BuildProduct(_projectDir!, logFilePath, false, $"The build attempt resulted in exception: {ex}."));
throw;
}
}

protected void CreateProject(string id, BuildArgs buildArgs, BuildProjectOptions options)
{
if (options.FromTemplate == WasmTemplate.wasmbrowser)
{
CreateWasmTemplateProject(id, template: "wasmbrowser", buildArgs.ExtraBuildArgs ?? string.Empty);
File.Copy(Path.Combine(AppContext.BaseDirectory,
options.TargetFramework == "net8.0" ? "test-main.js" : "data/test-main-7.0.js"),
Path.Combine(_projectDir!, "wwwroot", "test-main.js"));
File.Move(Path.Combine(_projectDir!, $"{id}.csproj"), Path.Combine(_projectDir!, $"{buildArgs.ProjectName}.csproj"));
}
else
{
InitPaths(id);
InitProjectDir(_projectDir);
options.InitProject?.Invoke();

File.WriteAllText(Path.Combine(_projectDir, $"{buildArgs.ProjectName}.csproj"), buildArgs.ProjectFileContents);
File.Copy(Path.Combine(AppContext.BaseDirectory,
options.TargetFramework == "net8.0" ? "test-main.js" : "data/test-main-7.0.js"),
Path.Combine(_projectDir, "test-main.js"));

File.WriteAllText(Path.Combine(_projectDir!, "index.html"), @"<html><body><script type=""module"" src=""test-main.js""></script></body></html>");
}
}

public void InitBlazorWasmProjectDir(string id, string targetFramework = DefaultTargetFrameworkForBlazor)
{
InitPaths(id);
Expand Down Expand Up @@ -809,7 +826,7 @@ protected static void AssertFilesExist(string dir, IEnumerable<string> filenames
{
string prefix = label != null ? $"{label}: " : string.Empty;
if (!Directory.Exists(dir))
throw new XunitException($"[{label}] {dir} not found");
throw new XunitException($"[{label}] {dir} directory not found");
foreach (string filename in filenames)
{
string path = Path.IsPathRooted(filename) ? filename : Path.Combine(dir, filename);
Expand Down Expand Up @@ -912,11 +929,11 @@ private string FindSubDirIgnoringCase(string parentDir, string dirName)
return first ?? Path.Combine(parentDir, dirName);
}

protected string GetBinDir(string config, string targetFramework=DefaultTargetFramework, string? baseDir=null)
protected string GetBinDir(string config, string targetFramework=DefaultTargetFramework, string? baseDir=null, bool usesWasmSdk=false)
{
var dir = baseDir ?? _projectDir;
Assert.NotNull(dir);
return Path.Combine(dir!, "bin", config, targetFramework, "browser-wasm");
return Path.Combine(dir!, "bin", config, targetFramework, usesWasmSdk ? string.Empty : "browser-wasm");
}

protected string GetObjDir(string config, string targetFramework=DefaultTargetFramework, string? baseDir=null)
Expand Down Expand Up @@ -1264,16 +1281,17 @@ public record BuildProjectOptions
bool CreateProject = true,
bool Publish = true,
bool BuildOnlyAfterPublish = true,
bool HasV8Script = true,
// bool HasV8Script = true,
string? Verbosity = null,
string? Label = null,
string? TargetFramework = null,
string? MainJS = null,
WasmTemplate FromTemplate = WasmTemplate.none,
WasmTemplate FromTemplate = WasmTemplate.wasmbrowser,
IDictionary<string, string>? ExtraBuildEnvironmentVariables = null
)
{
public bool IsTemplateUsingWasmSdk => FromTemplate == WasmTemplate.wasmbrowser || FromTemplate == WasmTemplate.blazorwasm;
public bool HasV8Script => !IsTemplateUsingWasmSdk && FromTemplate != WasmTemplate.wasmbrowser_legacy && FromTemplate != WasmTemplate.wasmconsole;
}

public record BlazorBuildOptions
Expand Down
6 changes: 3 additions & 3 deletions src/mono/wasm/Wasm.Build.Tests/WasmLegacyTemplateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ private void UpdateBrowserMainJs(string targetFramework)
string mainJsPath = Path.Combine(_projectDir!, "main.js");
string mainJsContent = File.ReadAllText(mainJsPath);

// FIXME: withConsoleForwarding - use only with wasm app host
// .withConsoleForwarding - use only with WasmAppHost
// .withExitOnUnhandledError() is available only only >net7.0
mainJsContent = mainJsContent.Replace(".create()",
targetFramework == "net8.0"
Expand Down Expand Up @@ -71,7 +71,7 @@ public void BrowserBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: true,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.js",
Publish: false,
TargetFramework: DefaultTargetFramework,
Expand All @@ -94,7 +94,7 @@ public void BrowserBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: !expectRelinking,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.js",
Publish: true,
TargetFramework: DefaultTargetFramework,
Expand Down
29 changes: 29 additions & 0 deletions src/mono/wasm/Wasm.Build.Tests/WasmSdk.props
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!--
***********************************************************************************************
Sdk.props

WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
created a backup copy. Incorrect changes to this file will make it
impossible to load or build your projects from the command-line or the IDE.

Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->
<Project ToolsVersion="14.0">
<PropertyGroup>
<!-- FIXME: Important to get rid of missing workload -->
<UsingMicrosoftNETSdkBlazorWebAssembly>true</UsingMicrosoftNETSdkBlazorWebAssembly>
<UsingMicrosoftNETSdkWebAssembly>true</UsingMicrosoftNETSdkWebAssembly>

<!-- WASM projects defaults to browser-wasm -->
<RuntimeIdentifier Condition="'$(RuntimeIdentifier)' == ''">browser-wasm</RuntimeIdentifier>
<UseMonoRuntime>true</UseMonoRuntime>

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file has a slight change in SDK dotnet/sdk#32170

<_WasmSdkImportsMicrosoftNETSdkPublish Condition="'$(UsingMicrosoftNETSdkPublish)' != 'true'">true</_WasmSdkImportsMicrosoftNETSdkPublish>
<_WasmSdkImportsMicrosoftNETSdkStaticWebAssets Condition="'$(UsingMicrosoftNETSdkStaticWebAssets)' != 'true'">true</_WasmSdkImportsMicrosoftNETSdkStaticWebAssets>
</PropertyGroup>

<Import Sdk="Microsoft.NET.Sdk.StaticWebAssets" Project="Sdk.props" Condition="'$(_WasmSdkImportsMicrosoftNETSdkStaticWebAssets)' == 'true'" />
<Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.props" Condition="'$(_WasmSdkImportsMicrosoftNETSdkPublish)' == 'true'" />
<Import Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" Project="Sdk.props" />
</Project>
16 changes: 16 additions & 0 deletions src/mono/wasm/Wasm.Build.Tests/WasmSdk.targets
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!--
***********************************************************************************************
Sdk.targets

WARNING: DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
created a backup copy. Incorrect changes to this file will make it
impossible to load or build your projects from the command-line or the IDE.

Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->
<Project ToolsVersion="14.0">
<Import Sdk="Microsoft.NET.Sdk.StaticWebAssets" Project="Sdk.targets" Condition="'$(_WasmSdkImportsMicrosoftNETSdkStaticWebAssets)' == 'true'" />
<Import Sdk="Microsoft.NET.Sdk.Publish" Project="Sdk.targets" Condition="'$(_WasmSdkImportsMicrosoftNETSdkPublish)' == 'true'" />
<Import Sdk="Microsoft.NET.Sdk.WebAssembly.Pack" Project="Sdk.targets" />
</Project>
12 changes: 6 additions & 6 deletions src/mono/wasm/Wasm.Build.Tests/WasmTemplateTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public void BrowserBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: true,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.js",
Publish: false,
TargetFramework: DefaultTargetFramework,
Expand All @@ -120,7 +120,7 @@ public void BrowserBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: !expectRelinking,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.js",
Publish: true,
TargetFramework: BuildTestBase.DefaultTargetFramework,
Expand Down Expand Up @@ -150,7 +150,7 @@ public void ConsoleBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: true,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.mjs",
Publish: false,
TargetFramework: BuildTestBase.DefaultTargetFramework,
Expand All @@ -176,7 +176,7 @@ public void ConsoleBuildThenPublish(string config)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: !expectRelinking,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.mjs",
Publish: true,
TargetFramework: BuildTestBase.DefaultTargetFramework,
Expand Down Expand Up @@ -220,7 +220,7 @@ private void ConsoleBuildAndRun(string config, bool relinking, string extraNewAr
new BuildProjectOptions(
DotnetWasmFromRuntimePack: !relinking,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.mjs",
Publish: false,
TargetFramework: expectedTFM,
Expand Down Expand Up @@ -392,7 +392,7 @@ public void ConsolePublishAndRun(string config, bool aot, bool relinking)
new BuildProjectOptions(
DotnetWasmFromRuntimePack: !expectRelinking,
CreateProject: false,
HasV8Script: false,
// HasV8Script: false,
MainJS: "main.mjs",
Publish: true,
TargetFramework: BuildTestBase.DefaultTargetFramework,
Expand Down