diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 6a13c2b96..a86a20205 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -7,28 +7,36 @@
https://github.com/dotnet/command-line-api
02fe27cd6a9b001c8feb7938e6ef4b3799745759
+
https://github.com/dotnet/command-line-api
02fe27cd6a9b001c8feb7938e6ef4b3799745759
-
+
https://github.com/dotnet/arcade
- bab85ba4579526962b0dbb0aa4db625c50da8859
-
+ 0d95a90310e5e2afbef31f4ca1c4b692698cd686
+
+
+ https://github.com/dotnet/arcade
+ 0d95a90310e5e2afbef31f4ca1c4b692698cd686
-
+
+
https://github.com/dotnet/arcade
- bab85ba4579526962b0dbb0aa4db625c50da8859
+ 0d95a90310e5e2afbef31f4ca1c4b692698cd686
+
-
+
+
https://github.com/dotnet/source-build-reference-packages
- ef691e3c401949dab9986a50d8288a6e489f72bb
+ c0b5d69a1a1513528c77fffff708c7502d57c35c
-
+
+
https://github.com/dotnet/source-build-externals
- 8263b543a5ceb0cd864cdb9e9011f1289c0dd246
+ 83566118e44922c30d146654d42c7c3745cc119d
diff --git a/eng/common/cross/build-rootfs.sh b/eng/common/cross/build-rootfs.sh
index 4228f202e..9b2791cf5 100755
--- a/eng/common/cross/build-rootfs.sh
+++ b/eng/common/cross/build-rootfs.sh
@@ -182,12 +182,12 @@ while :; do
__AlpinePackages="${__AlpinePackages// lldb-dev/}"
__QEMUArch=riscv64
__UbuntuArch=riscv64
- __UbuntuRepo="http://deb.debian.org/debian-ports"
+ __UbuntuRepo="http://deb.debian.org/debian"
__UbuntuPackages="${__UbuntuPackages// libunwind8-dev/}"
unset __LLDB_Package
- if [[ -e "/usr/share/keyrings/debian-ports-archive-keyring.gpg" ]]; then
- __Keyring="--keyring /usr/share/keyrings/debian-ports-archive-keyring.gpg --include=debian-ports-archive-keyring"
+ if [[ -e "/usr/share/keyrings/debian-archive-keyring.gpg" ]]; then
+ __Keyring="--keyring /usr/share/keyrings/debian-archive-keyring.gpg --include=debian-archive-keyring"
fi
;;
ppc64le)
diff --git a/eng/common/cross/riscv64/sources.list.sid b/eng/common/cross/riscv64/sources.list.sid
index 65f730d22..b5f7a7e6e 100644
--- a/eng/common/cross/riscv64/sources.list.sid
+++ b/eng/common/cross/riscv64/sources.list.sid
@@ -1 +1 @@
-deb http://deb.debian.org/debian-ports sid main
+deb http://deb.debian.org/debian sid main
diff --git a/eng/common/templates/job/publish-build-assets.yml b/eng/common/templates/job/publish-build-assets.yml
index d9c5b4aaf..3115990d5 100644
--- a/eng/common/templates/job/publish-build-assets.yml
+++ b/eng/common/templates/job/publish-build-assets.yml
@@ -63,6 +63,10 @@ jobs:
steps:
- ${{ if and(eq(parameters.runAsPublic, 'false'), ne(variables['System.TeamProject'], 'public'), notin(variables['Build.Reason'], 'PullRequest')) }}:
+ - checkout: self
+ fetchDepth: 3
+ clean: true
+
- task: DownloadBuildArtifacts@0
displayName: Download artifact
inputs:
diff --git a/eng/common/templates/post-build/common-variables.yml b/eng/common/templates/post-build/common-variables.yml
index d7bf5c6e3..b9ede10bf 100644
--- a/eng/common/templates/post-build/common-variables.yml
+++ b/eng/common/templates/post-build/common-variables.yml
@@ -18,7 +18,7 @@ variables:
- name: SymbolToolVersion
value: 1.0.1
- name: BinlogToolVersion
- value: 1.0.9
+ value: 1.0.11
- name: runCodesignValidationInjection
value: false
diff --git a/eng/common/templates/steps/publish-logs.yml b/eng/common/templates/steps/publish-logs.yml
index 835e52751..80861297d 100644
--- a/eng/common/templates/steps/publish-logs.yml
+++ b/eng/common/templates/steps/publish-logs.yml
@@ -3,7 +3,7 @@ parameters:
JobLabel: ''
CustomSensitiveDataList: ''
# A default - in case value from eng/common/templates/post-build/common-variables.yml is not passed
- BinlogToolVersion: '1.0.9'
+ BinlogToolVersion: '1.0.11'
steps:
- task: Powershell@2
diff --git a/eng/common/tools.ps1 b/eng/common/tools.ps1
index 9048d6032..0da65b574 100644
--- a/eng/common/tools.ps1
+++ b/eng/common/tools.ps1
@@ -596,7 +596,15 @@ function InitializeBuildTool() {
ExitWithExitCode 1
}
$dotnetPath = Join-Path $dotnetRoot (GetExecutableFileName 'dotnet')
- $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = 'net9.0' }
+
+ # Use override if it exists - commonly set by source-build
+ if ($null -eq $env:_OverrideArcadeInitializeBuildToolFramework) {
+ $initializeBuildToolFramework="net9.0"
+ } else {
+ $initializeBuildToolFramework=$env:_OverrideArcadeInitializeBuildToolFramework
+ }
+
+ $buildTool = @{ Path = $dotnetPath; Command = 'msbuild'; Tool = 'dotnet'; Framework = $initializeBuildToolFramework }
} elseif ($msbuildEngine -eq "vs") {
try {
$msbuildPath = InitializeVisualStudioMSBuild -install:$restore
diff --git a/global.json b/global.json
index 6c2d2a0e3..2d463b913 100644
--- a/global.json
+++ b/global.json
@@ -10,6 +10,6 @@
}
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24055.2"
+ "Microsoft.DotNet.Arcade.Sdk": "9.0.0-beta.24065.5"
}
}
diff --git a/src/Directory.Build.targets b/src/Directory.Build.targets
index e5a56d748..82225cbbf 100644
--- a/src/Directory.Build.targets
+++ b/src/Directory.Build.targets
@@ -2,16 +2,64 @@
+
+ $(ArtifactsObjDir)generatedtests/
+ $(NETCoreSdkVersion)
+
+
+
+
+
+
+
+
+
+
+
+
+ <_DirectoryBuildPropsContent>
+<Project>
+ <PropertyGroup>
+ <ManagePackageVersionsCentrally>
+ false
+ </ManagePackageVersionsCentrally>
+ </PropertyGroup>
+</Project>
+
+
+
+
+
-
+
--dotnet-root "$(DotNetRoot.TrimEnd('\'))"
- $(TestArgs) --sdk-version $(NETCoreSdkVersion)
- $(TestArgs) --test-root "$(ArtifactsObjDir)generatedtests"
+ $(TestArgs) --sdk-version $(TestSdkVersion)
+ $(TestArgs) --test-root "$(TestRoot)"
+ $(TestArgs) $(AdditionalTestArgs)
+
+ <_MSBuildSdksDir>$(DotNetRoot)sdk/$(TestSdkVersion)/Sdks
-
+
+ <_TestEnvVars Include="MSBuildSDKsPath=$(_MSBuildSdksDir)" />
+
+
+
diff --git a/src/Microsoft.DotNet.ScenarioTests.Common/Program.cs b/src/Microsoft.DotNet.ScenarioTests.Common/Program.cs
index 958dce6ca..a644619a2 100644
--- a/src/Microsoft.DotNet.ScenarioTests.Common/Program.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.Common/Program.cs
@@ -9,6 +9,7 @@
using Xunit.Sdk;
using System.Runtime.InteropServices;
using System.Collections.Immutable;
+using System.Globalization;
namespace ScenarioTests
{
@@ -124,7 +125,9 @@ public static int Invoke(string dotnetRoot,
var summarySink = new DelegatingExecutionSummarySink(testSink,
() => false,
(completed, summary) => Console.WriteLine($"Tests run: {summary.Total}, Errors: {summary.Errors}, Failures: {summary.Failed}, Skipped: {summary.Skipped}. Time: {TimeSpan.FromSeconds((double)summary.Time).TotalSeconds}s"));
+ var resultsXmlAssemblies = new XElement("assemblies");
var resultsXmlAssembly = new XElement("assembly");
+ resultsXmlAssemblies.Add(resultsXmlAssembly);
var resultsSink = new DelegatingXmlCreationSink(summarySink, resultsXmlAssembly);
var platform = OperatingSystemFinder.GetPlatform();
@@ -133,6 +136,7 @@ public static int Invoke(string dotnetRoot,
testSink.Execution.TestAssemblyFinishedEvent += args =>
{
+ resultsXmlAssemblies.Add(new XAttribute("timestamp", DateTime.Now.ToString(CultureInfo.InvariantCulture)));
Console.WriteLine($"Finished {args.Message.TestAssembly.Assembly}{Environment.NewLine}");
testsFinished.SetResult();
};
@@ -187,7 +191,7 @@ public static int Invoke(string dotnetRoot,
if (xmlResultsPath != null)
{
- resultsXmlAssembly.Save(xmlResultsPath);
+ resultsXmlAssemblies.Save(xmlResultsPath);
}
if (!noCleanTestRoot)
diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkActions.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkActions.cs
index 3f2a0ba21..cd46bc71e 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkActions.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkActions.cs
@@ -16,4 +16,7 @@ public enum DotNetSdkActions
PublishR2R = 32,
Test = 64,
AddClassLibRef = 128,
+ FullWorkloadTest = 256,
+ WorkloadInstall = 512,
+ WorkloadUninstall = 1024,
}
diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkHelper.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkHelper.cs
index 19acb1a92..97e87c8d5 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkHelper.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkHelper.cs
@@ -262,6 +262,68 @@ public void ExecuteAddClassReference(string projectDirectory)
ExecuteCmd($"add reference {classDirectory}", projectDirectory);
}
+ public void ExecuteWorkloadInstall(string projectDirectory, string workloadIds)
+ {
+ ExecuteCmd($"workload install {workloadIds} --skip-manifest-update", projectDirectory);
+ }
+
+ public string ExecuteWorkloadList(string projectDirectory, string workloadIds, bool shouldBeInstalled,
+ string originalSource = "", bool firstRun = false)
+ {
+ ExecuteCmd($"workload list", projectDirectory, additionalProcessConfigCallback: processConfigCallback);
+
+ void processConfigCallback(Process process)
+ {
+ string output = "";
+ process.OutputDataReceived += new DataReceivedEventHandler((sender, e) =>
+ {
+ if (e.Data is null)
+ {
+ return;
+ }
+
+ output += e.Data;
+ if (!output.Contains("find additional workloads to install."))
+ {
+ return;
+ }
+
+ if (output.Contains(workloadIds))
+ {
+ if (!shouldBeInstalled)
+ {
+ if (firstRun)
+ {
+ originalSource = output;
+ }
+ else if(output != originalSource)
+ {
+ OutputHelper.WriteLine("output is " + output);
+ OutputHelper.WriteLine("originalSource is " + originalSource);
+ throw new Exception($"{workloadIds} shouldn't be installed but was found.");
+ }
+ }
+ OutputHelper.WriteLine($"{workloadIds} is installed");
+ }
+ else
+ {
+ if (shouldBeInstalled)
+ {
+ throw new Exception($"{workloadIds} should be installed but wasn't found.");
+ }
+ OutputHelper.WriteLine($"{workloadIds} is not installed");
+ }
+ });
+ }
+
+ return originalSource;
+ }
+
+ public void ExecuteWorkloadUninstall(string projectDirectory, string workloadIds)
+ {
+ ExecuteCmd($"workload uninstall {workloadIds}", projectDirectory);
+ }
+
public void ExecuteAddMultiTFM(string projectName, string projectDirectory, DotNetLanguage language, string[] frameworks)
{
string extension;
@@ -308,8 +370,8 @@ public void ExecuteAddMultiTFM(string projectName, string projectDirectory, DotN
}
catch (XPathException e)
{
- Console.WriteLine("Unable to find node");
- Console.WriteLine(e.Message);
+ OutputHelper.WriteLine("Unable to find node");
+ OutputHelper.WriteLine(e.Message);
throw;
}
}
@@ -328,7 +390,7 @@ internal void CopyHelper(string projectDirectory, string existing, bool recursiv
{
string targetPath = Path.Combine(projectDirectory, file.Name);
file.CopyTo(targetPath);
- Console.WriteLine($"Copying {file.Name} to {targetPath}");
+ OutputHelper.WriteLine($"Copying {file.Name} to {targetPath}");
}
if (recursive)
{
diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkTemplate.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkTemplate.cs
index 4465c17f3..589a0f6bc 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkTemplate.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotNetSdkTemplate.cs
@@ -22,4 +22,5 @@ public enum DotNetSdkTemplate
Angular,
Wpf,
Winforms,
+ Aspire,
}
diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotnetWorkloadTest.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotnetWorkloadTest.cs
new file mode 100644
index 000000000..141b70b36
--- /dev/null
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/DotnetWorkloadTest.cs
@@ -0,0 +1,49 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+namespace Microsoft.DotNet.ScenarioTests.SdkTemplateTests;
+
+internal class DotnetWorkloadTest
+{
+ public DotNetSdkActions Commands { get; }
+ public DotNetLanguage Language { get; }
+ public bool NoHttps { get => TargetRid.Contains("osx"); }
+ public string TargetRid { get; set; }
+ public string TargetArchitecture { get => TargetRid.Split('-')[1]; }
+ public string ScenarioName { get; }
+
+ public DotnetWorkloadTest(string scenarioName, string targetRid, DotNetSdkActions commands = DotNetSdkActions.None)
+ {
+ ScenarioName = scenarioName;
+ Commands = commands;
+ TargetRid = targetRid;
+ }
+
+ internal void Execute(DotNetSdkHelper dotNetHelper, string testRoot, string workloadID)
+ {
+ string projectName = $"{ScenarioName}_Workload_{Commands.ToString()}";
+ string projectDirectory = Path.Combine(testRoot, projectName);
+
+ Directory.CreateDirectory(projectDirectory);
+
+ if (Commands.HasFlag(DotNetSdkActions.FullWorkloadTest))
+ {
+ string originalSource = "";
+ //running workload list before install to see if present from another source
+ originalSource = dotNetHelper.ExecuteWorkloadList(projectDirectory, workloadID, false, firstRun: true);
+ dotNetHelper.ExecuteWorkloadInstall(projectDirectory, workloadID);
+ dotNetHelper.ExecuteWorkloadList(projectDirectory, workloadID, true, originalSource);
+ dotNetHelper.ExecuteWorkloadUninstall(projectDirectory, workloadID);
+ dotNetHelper.ExecuteWorkloadList(projectDirectory, workloadID, false, originalSource);
+ }
+ if (Commands.HasFlag(DotNetSdkActions.WorkloadInstall))
+ {
+ dotNetHelper.ExecuteWorkloadInstall(projectDirectory, workloadID);
+ }
+ if (Commands.HasFlag(DotNetSdkActions.WorkloadUninstall))
+ {
+ dotNetHelper.ExecuteWorkloadUninstall(projectDirectory, workloadID);
+ }
+ }
+}
diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
index 608cc9515..c43fdd661 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
@@ -197,6 +197,45 @@ public void VerifyBlazorWasmTemplate(DotNetLanguage language)
newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
}
+ [Theory]
+ [InlineData(DotNetLanguage.CSharp)]
+ public void VerifyRazorTemplate(DotNetLanguage language)
+ {
+ var newTest = new SdkTemplateTest(
+ nameof(SdkTemplateTest), language, _scenarioTestInput.TargetRid, DotNetSdkTemplate.Razor,
+ DotNetSdkActions.Build | DotNetSdkActions.Run | DotNetSdkActions.Publish);
+ newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
+ }
+
+ [Fact]
+ [Trait("Category", "Workload")]
+ public void VerifyWorkloadCmd()
+ {
+ var newTest = new DotnetWorkloadTest(
+ nameof(SdkTemplateTest), _scenarioTestInput.TargetRid,
+ DotNetSdkActions.FullWorkloadTest);
+ newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot, "wasm-tools");
+ }
+
+ [Fact]
+ [Trait("Category", "Workload")]
+ [Trait("Category", "InProgress")]
+ public void VerifyAspireTemplate()
+ {
+ var setup = new DotnetWorkloadTest(
+ nameof(SdkTemplateTest), _scenarioTestInput.TargetRid,
+ DotNetSdkActions.WorkloadInstall);
+ setup.Execute(_sdkHelper, _scenarioTestInput.TestRoot, "aspire");
+ var newTest = new SdkTemplateTest(
+ nameof(SdkTemplateTest), DotNetLanguage.CSharp, _scenarioTestInput.TargetRid, DotNetSdkTemplate.Aspire,
+ DotNetSdkActions.Build | DotNetSdkActions.Publish);
+ newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
+ var cleanup = new DotnetWorkloadTest(
+ nameof(SdkTemplateTest), _scenarioTestInput.TargetRid,
+ DotNetSdkActions.WorkloadUninstall);
+ cleanup.Execute(_sdkHelper, _scenarioTestInput.TestRoot, "aspire");
+ }
+
[Fact]
[Trait("Category", "Offline")]
public void VerifyPreMadeSolution()