Skip to content

Commit

Permalink
Enable scenario test execution in VMR build (#19222)
Browse files Browse the repository at this point in the history
  • Loading branch information
mthalman authored May 1, 2024
1 parent e813718 commit 6eadf9f
Show file tree
Hide file tree
Showing 14 changed files with 212 additions and 16 deletions.
33 changes: 27 additions & 6 deletions eng/pipelines/templates/jobs/vmr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,7 @@ jobs:
set -ex
dockerVolumeArgs="-v $(sourcesPath):/vmr"
sourceOnlyArgs=''
customBuildArgs=''
extraBuildProperties=''
if [[ ! -z '${{ parameters.targetOS }}' ]]; then
Expand All @@ -381,11 +381,15 @@ jobs:
extraBuildProperties="$extraBuildProperties /p:TargetArchitecture=${{ parameters.targetArchitecture }}"
fi
if [[ '${{ parameters.useDevVersions }}' == 'True' ]]; then
customBuildArgs="$customBuildArgs --dev"
fi
if [[ '${{ parameters.buildSourceOnly }}' == 'True' ]]; then
if [[ '${{ parameters.enablePoison }}' == 'True' ]]; then
sourceOnlyArgs='--poison'
customBuildArgs="$customBuildArgs --poison"
fi
sourceOnlyArgs="$sourceOnlyArgs --source-only /p:SmokeTestsWarnOnSdkContentDiffs=true /p:SmokeTestsExcludeOmniSharpTests=${{ parameters.excludeOmniSharpTests }}"
customBuildArgs="$customBuildArgs --source-only /p:SmokeTestsWarnOnSdkContentDiffs=true /p:SmokeTestsExcludeOmniSharpTests=${{ parameters.excludeOmniSharpTests }}"
fi
if [[ -n "${{ parameters.extraProperties }}" ]]; then
Expand All @@ -394,10 +398,10 @@ jobs:
# Only use Docker when a container is specified
if [[ -n "${{ parameters.container }}" ]]; then
docker run --rm $dockerVolumeArgs -w /vmr ${{ parameters.container }} ./build.sh /bl:artifacts/log/Release/Test.binlog --test $sourceOnlyArgs $extraBuildProperties $(additionalBuildArgs)
docker run --rm $dockerVolumeArgs -w /vmr ${{ parameters.container }} ./build.sh /bl:artifacts/log/Release/Test.binlog --test $customBuildArgs $extraBuildProperties $(additionalBuildArgs)
else
cd $(sourcesPath)
./build.sh /bl:artifacts/log/Release/Test.binlog --test $sourceOnlyArgs $extraBuildProperties $(additionalBuildArgs)
./build.sh /bl:artifacts/log/Release/Test.binlog --test $customBuildArgs $extraBuildProperties $(additionalBuildArgs)
fi
displayName: Run Tests
Expand All @@ -424,6 +428,10 @@ jobs:
CopyWithRelativeFolders "src/" $targetFolder "*.binlog"
CopyWithRelativeFolders "src/" $targetFolder "*.log"
if (Test-Path "artifacts/scenario-tests/") {
CopyWithRelativeFolders "artifacts/scenario-tests/" $targetFolder "*.binlog"
}
if (Test-Path "artifacts/TestResults/*") {
CopyWithRelativeFolders "artifacts/TestResults/" $targetFolder "*.binlog"
CopyWithRelativeFolders "artifacts/TestResults/" $targetFolder "*.diff"
Expand Down Expand Up @@ -451,6 +459,7 @@ jobs:
cd "$(sourcesPath)"
find artifacts/log/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/log/ -type f -name "*.log" -exec rsync -R {} -t ${targetFolder} \;
[ -d "artifacts/scenario-tests/" ] && find artifacts/scenario-tests/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/TestResults/ -type f -name "*.binlog" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/TestResults/ -type f -name "*.diff" -exec rsync -R {} -t ${targetFolder} \;
find artifacts/TestResults/ -type f -name "Updated*.txt" -exec rsync -R {} -t ${targetFolder} \;
Expand Down Expand Up @@ -486,13 +495,25 @@ jobs:
condition: succeededOrFailed()
continueOnError: true
inputs:
testRunner: vSTest
testRunner: VSTest
testResultsFiles: 'artifacts/TestResults/Release/*.trx'
searchFolder: $(sourcesPath)
mergeTestResults: true
publishRunAttachments: true
testRunTitle: Tests_$(Agent.JobName)

- task: PublishTestResults@2
displayName: Publish Scenario Test Results
condition: succeededOrFailed()
continueOnError: true
inputs:
testRunner: xUnit
testResultsFiles: 'artifacts/TestResults/**/scenario-tests/*.xml'
searchFolder: $(sourcesPath)
mergeTestResults: true
publishRunAttachments: true
testRunTitle: ScenarioTests_$(Agent.JobName)

- task: CopyFiles@2
inputs:
SourceFolder: $(sourcesPath)/artifacts
Expand Down
2 changes: 2 additions & 0 deletions eng/pipelines/templates/stages/vmr-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ stages:
artifactsRid: alpine.3.19-x64
pool: ${{ parameters.pool_Linux }}
container: ${{ variables.alpine319Container }}
targetOS: linux-musl
buildFromArchive: false # 🚫
buildSourceOnly: true #
enablePoison: true #
Expand All @@ -143,6 +144,7 @@ stages:
architecture: x64
pool: ${{ parameters.pool_Linux }}
container: ${{ variables.alpine319Container }}
targetOS: linux-musl
buildFromArchive: false # 🚫
buildSourceOnly: true #
enablePoison: false # 🚫
Expand Down
1 change: 1 addition & 0 deletions src/SourceBuild/content/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@
<IntermediateSymbolsRootDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'Symbols'))</IntermediateSymbolsRootDir>
<AssetManifestsIntermediateDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'AssetManifests'))</AssetManifestsIntermediateDir>
<ArtifactsAssetsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'assets', '$(Configuration)'))</ArtifactsAssetsDir>
<DotNetSdkExtractDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsObjDir)', 'extracted-dotnet-sdk'))</DotNetSdkExtractDir>

<PrebuiltPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'prebuilt'))</PrebuiltPackagesPath>
<PreviouslyRestoredPackagesPath>$([MSBuild]::NormalizeDirectory('$(PrereqsPackagesDir)', 'previouslyRestored'))</PreviouslyRestoredPackagesPath>
Expand Down
2 changes: 1 addition & 1 deletion src/SourceBuild/content/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ while [[ $# > 0 ]]; do
;;

# Advanced settings
-build-tests)
-build-repo-tests)
properties="$properties /p:DotNetBuildTests=true"
;;
-ci)
Expand Down
20 changes: 20 additions & 0 deletions src/SourceBuild/content/eng/extract-sdk-archive.proj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.Build.NoTargets">

<PropertyGroup>
<TargetFramework>$(NetCurrent)</TargetFramework>
</PropertyGroup>

<Target Name="ExtractSdkArchive"
BeforeTargets="AfterBuild"
DependsOnTargets="DetermineSourceBuiltSdkVersion"
Inputs="$(SdkTarballPath)"
Outputs="$(DotNetSdkExtractDir)">
<MakeDir Directories="$(DotNetSdkExtractDir)" />
<Exec Condition="'$(ArchiveExtension)' == '.tar.gz'"
Command="tar -xzf $(SdkTarballPath) -C $(DotNetSdkExtractDir)" />
<Unzip Condition="'$(ArchiveExtension)' == '.zip'"
SourceFiles="$(SdkTarballPath)"
DestinationFolder="$(DotNetSdkExtractDir)" />
</Target>

</Project>
8 changes: 2 additions & 6 deletions src/SourceBuild/content/eng/finish-source-only.proj
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
<ItemGroup>
<ProjectReference Include="$(TasksDir)Microsoft.DotNet.UnifiedBuild.Tasks\Microsoft.DotNet.UnifiedBuild.Tasks.csproj" />
<ProjectReference Include="$(TasksDir)Microsoft.DotNet.SourceBuild.Tasks.LeakDetection\Microsoft.DotNet.SourceBuild.Tasks.LeakDetection.csproj" />
<ProjectReference Include="$(RepositoryEngineeringDir)extract-sdk-archive.proj" />
<ProjectReference Include="$(RepositoryEngineeringDir)merge-asset-manifests.proj" />
</ItemGroup>

Expand Down Expand Up @@ -59,13 +60,9 @@
Outputs="$(SdkSymbolsTarball)">
<PropertyGroup>
<IntermediateSdkSymbolsLayout>$(BaseIntermediateOutputPath)SdkSymbols</IntermediateSdkSymbolsLayout>
<IntermediateSdkLayout>$(BaseIntermediateOutputPath)Sdk</IntermediateSdkLayout>
</PropertyGroup>

<MakeDir Directories="$(IntermediateSdkLayout)" />
<Exec Command="tar -xzf $(SdkTarballPath) -C $(IntermediateSdkLayout)" />

<CreateSdkSymbolsLayout SdkLayoutPath="$(IntermediateSdkLayout)"
<CreateSdkSymbolsLayout SdkLayoutPath="$(DotNetSdkExtractDir)"
AllSymbolsPath="$(IntermediateSymbolsRootDir)"
SdkSymbolsLayoutPath="$(IntermediateSdkSymbolsLayout)"
FailOnMissingPDBs="false" />
Expand All @@ -76,7 +73,6 @@
<Message Importance="High" Text="Packaged sdk symbols in '$(SdkSymbolsTarball)'" />

<RemoveDir Directories="$(IntermediateSdkSymbolsLayout)" />
<RemoveDir Directories="$(IntermediateSdkLayout)" />
</Target>

<!--
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,9 @@ private IList<string> GenerateSymbolsLayout(Hashtable allPdbGuids)
{
// Copy matching pdb to symbols path, preserving sdk binary's hierarchy
string sourcePath = (string)allPdbGuids[debugId]!;
string fileRelativePath = file.Substring(SdkLayoutPath.Length);
string destinationPath =
file.Replace(SdkLayoutPath, SdkSymbolsLayoutPath)
Path.Combine(SdkSymbolsLayoutPath, fileRelativePath)
.Replace(Path.GetFileName(file), Path.GetFileName(sourcePath));

Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)!);
Expand Down
11 changes: 11 additions & 0 deletions src/SourceBuild/content/repo-projects/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,17 @@
<BuildArgs>$(BuildArgs) /p:ReferencePackageNupkgCacheDir="$(ReferencePackagesDir)"</BuildArgs>
</PropertyGroup>

<PropertyGroup>
<TestActions>$(FlagParameterPrefix)restore</TestActions>
<TestActions>$(TestActions) $(FlagParameterPrefix)test</TestActions>

<TestArgs Condition="'$(UseOfficialBuildVersioning)' != 'false'">$(FlagParameterPrefix)ci</TestArgs>
<TestArgs>$(TestArgs) $(FlagParameterPrefix)configuration $(Configuration)</TestArgs>
<TestArgs>$(TestArgs) /bl:artifacts/log/$(Configuration)/Test.binlog</TestArgs>

<TestCommand>$(BuildScript) $(TestActions) $(TestArgs)</TestCommand>
</PropertyGroup>

<PropertyGroup Condition="'$(EnableExtraDebugging)' == 'true'">
<MSBuildDebugPathTargetDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'msbuild-debug'))</MSBuildDebugPathTargetDir>
<RoslynDebugPathTargetDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'roslyn-debug'))</RoslynDebugPathTargetDir>
Expand Down
55 changes: 54 additions & 1 deletion src/SourceBuild/content/repo-projects/scenario-tests.proj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.Build.NoTargets">
<Project Sdk="Microsoft.Build.NoTargets" TreatAsLocalProperty="CleanWhileBuilding">

<ItemGroup>
<RepositoryReference Include="arcade" />
Expand All @@ -10,4 +10,57 @@
<RepositoryReference Include="source-build-reference-packages" />
</ItemGroup>

<PropertyGroup>
<!-- The scenario-tests repo shouldn't be cleaned after building as we run tests from it. -->
<CleanWhileBuilding>false</CleanWhileBuilding>

<ScenarioTestsArtifactsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsDir)', 'scenario-tests'))</ScenarioTestsArtifactsDir>
<ScenarioTestsResultsDir>$([MSBuild]::NormalizeDirectory('$(ArtifactsTestResultsDir)', 'scenario-tests'))</ScenarioTestsResultsDir>
<_ScenarioTestsNuGetConfig>$(ScenarioTestsArtifactsDir)NuGet.config</_ScenarioTestsNuGetConfig>
<_InstallerNuGetConfig>$([MSBuild]::NormalizePath('$(SrcDir)', 'installer', 'NuGet.config'))</_InstallerNuGetConfig>
</PropertyGroup>

<Target Name="SetupNuGetConfig"
Inputs="$(_InstallerNuGetConfig)"
Outputs="$(_ScenarioTestsNuGetConfig)">

<Copy SourceFiles="$(_InstallerNuGetConfig)"
DestinationFiles="$(_ScenarioTestsNuGetConfig)" />

</Target>

<Target Name="RunScenarioTests"
DependsOnTargets="SetupNuGetConfig;DetermineSourceBuiltSdkVersion">

<PropertyGroup>
<_CurrentDateTime>$([System.DateTime]::Now.ToString("yyyy-MM-dd_HH_mm_ss"))</_CurrentDateTime>
<_TestXmlOutputPath>$(ScenarioTestsResultsDir)$(_CurrentDateTime).xml</_TestXmlOutputPath>
<_ScenarioTestsAdditionalArgs>--xml $(_TestXmlOutputPath) --target-rid $(TargetRid) --no-cleanup --no-traits Category=MultiTFM</_ScenarioTestsAdditionalArgs>

<!-- Define the test root as a sub-directory of the scenario test artifacts directory. It needs to be a sub-directory because the scenario test execution
will clean that directory. Since we need the NuGet.config file that we copied in to be preserved, that's stored in the directory above the test root. -->
<_TestRoot>$(ScenarioTestsArtifactsDir)artifacts/</_TestRoot>

<!-- It's necessary to explicitly define the path to the dotnet tool to prevent Arcade from attempting to derive it. Otherwise, it will run the dotnet
install script to get a new one. We must use the locally built SDK instead in order to support non-portable RIDs for source build. -->
<_DotNetTool>$(DotNetSdkExtractDir)$([System.IO.Path]::GetFileName('$(DotNetTool)'))</_DotNetTool>
</PropertyGroup>

<MakeDir Directories="$(ScenarioTestsResultsDir)" />

<ItemGroup>
<_ScenarioTestEnvVars Include="
TestRoot=$(_TestRoot);
DotNetRoot=$(DotNetSdkExtractDir);
TestSdkVersion=$(SourceBuiltSdkVersion);
AdditionalTestArgs=$(_ScenarioTestsAdditionalArgs);
DotNetTool=$(_DotNetTool);
_InitializeDotNetCli=$(DotNetSdkExtractDir)" />
</ItemGroup>

<Exec Command="$(TestCommand)"
WorkingDirectory="$(ProjectDirectory)"
EnvironmentVariables="@(_ScenarioTestEnvVars)" />
</Target>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<Project>

<Import Project="$([MSBuild]::GetPathOfFileAbove(Directory.Build.targets, $(MSBuildThisFileDirectory)..))" />

<!-- scenario-tests test execution requires a custom test target. -->
<Target Name="Test" DependsOnTargets="RunScenarioTests" />
<Target Name="VSTest" DependsOnTargets="RunScenarioTests" />

</Project>
17 changes: 17 additions & 0 deletions src/SourceBuild/content/test/scenario-tests/scenario-tests.proj
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.Build.NoTargets">

<PropertyGroup>
<TargetFramework>$(NetCurrent)</TargetFramework>
<IsTestProject>true</IsTestProject>
</PropertyGroup>

<!-- Scenarios tests are handled separately from the other test projects. This is because the output of the scenario tests is
an executable that is used to run the tests and so using the VSTest runner doesn't work with them. They also require
some setup steps to be configured with the VMR. -->
<Target Name="RunScenarioTests">
<MSBuild Projects="$(RepoProjectsDir)scenario-tests.proj"
Properties="Configuration=$(Configuration)"
Targets="RunScenarioTests" />
</Target>

</Project>
21 changes: 20 additions & 1 deletion src/SourceBuild/content/test/tests.proj
Original file line number Diff line number Diff line change
@@ -1,10 +1,29 @@
<Project Sdk="Microsoft.Build.Traversal">

<PropertyGroup>
<_RunScenarioTests>true</_RunScenarioTests>

<!-- Skip scenario tests if the host architecture is different from the target architecture since the tests
require the ability to execute the built SDK. But the CLI is not capable of running on a host with a
different architecture (i.e. "cannot execute binary file: Exec format error"). -->
<_RunScenarioTests Condition="'$(BuildArchitecture.ToLowerInvariant())' != '$(TargetArchitecture.ToLowerInvariant())'">false</_RunScenarioTests>

<!-- Skip scenario tests if the portable OS (determined from the host machine) is different from the target OS
since the tests require the ability to execute the built SDK. An example of where this would be disabled is
cross-build of using Mariner to build for Alpine (linux vs linux-musl). -->
<_RunScenarioTests Condition="'$(BuildOS)' != 'windows' and '$(__PortableTargetOS.ToLowerInvariant())' != '$(TargetOS.ToLowerInvariant())'">false</_RunScenarioTests>

<!-- The scenario tests are not supported when unofficial build versioning is used. -->
<_RunScenarioTests Condition="'$(UseOfficialBuildVersioning)' == 'false'">false</_RunScenarioTests>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="$(RepositoryEngineeringDir)extract-sdk-archive.proj" />
<ProjectReference Include="Microsoft.DotNet.SourceBuild.SmokeTests\Microsoft.DotNet.SourceBuild.SmokeTests.csproj"
Condition="'$(DotNetBuildSourceOnly)' == 'true'" />
<ProjectReference Include="Microsoft.DotNet.UnifiedBuild.Tests\Microsoft.DotNet.UnifiedBuild.Tests.csproj"
Condition="'$(ShortStack)' != 'true' and '$(PortableBuild)' == 'true' and '$(PgoInstrument)' != 'true'" />
<ProjectReference Include="scenario-tests\scenario-tests.proj" Condition="'$(_RunScenarioTests)' == 'true'" />
</ItemGroup>

</Project>
</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Matt Thalman <mthalman@microsoft.com>
Date: Tue, 30 Apr 2024 08:34:08 -0500
Subject: [PATCH] Disable Aspire scenario test

Backport: https://github.com/dotnet/sdk/pull/40485
---
.../SdkTemplateTests.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
index c43fdd6..bb5c52d 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
@@ -217,7 +217,7 @@ public class SdkTemplateTests : IClassFixture<ScenarioTestFixture>
newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot, "wasm-tools");
}

- [Fact]
+ //[Fact]
[Trait("Category", "Workload")]
[Trait("Category", "InProgress")]
public void VerifyAspireTemplate()
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Matt Thalman <mthalman@microsoft.com>
Date: Tue, 30 Apr 2024 10:21:32 -0500
Subject: [PATCH] Disable WPF scenario test

Backport: https://github.com/dotnet/source-build/issues/4361
---
.../SdkTemplateTests.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
index c43fdd6..35279a9 100644
--- a/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
+++ b/src/Microsoft.DotNet.ScenarioTests.SdkTemplateTests/SdkTemplateTests.cs
@@ -84,7 +84,7 @@ public class SdkTemplateTests : IClassFixture<ScenarioTestFixture>
newTest.Execute(_sdkHelper, _scenarioTestInput.TestRoot);
}

- [Theory]
+ //[Theory]
[InlineData(DotNetLanguage.CSharp)]
[InlineData(DotNetLanguage.VB)]
[Trait("Category", "Offline")]

0 comments on commit 6eadf9f

Please sign in to comment.