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()