Skip to content

Commit 3d682f9

Browse files
max-charlambCopilot
andcommitted
Convert cDAC dump tests to run on Helix
Replace the DumpCreation + DumpTest ADO stages in runtime-diagnostics.yml with a single CdacDumpTests stage that builds debuggees on ADO and sends dump generation + test execution to Helix machines. Flow: ADO builds runtime + debuggees, prepares a Helix payload containing test DLLs, debuggee binaries, and auto-generated dump type metadata. On Helix, each debuggee is run to produce a crash dump, then xunit tests validate the dumps. Changes: - Add BuildDebuggeesOnly target to DumpTests.targets using Exec with dotnet build (ensures implicit NuGet restore, matching _GenerateLocalDump) - Add PrepareHelixPayload target + XUnitConsoleRunner package to csproj; copies tests + debuggees, generates debuggee-metadata.props from GetDumpTypes for dynamic debuggee discovery - Create cdac-dump-helix.proj Helix SDK project that imports the generated metadata, builds per-OS dump generation + xunit test execution commands - Update runtime-diagnostics.yml with single CdacDumpTests stage - Add windows_arm64 platform support Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent ca778ae commit 3d682f9

4 files changed

Lines changed: 236 additions & 70 deletions

File tree

eng/pipelines/runtime-diagnostics.yml

Lines changed: 48 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ parameters:
1111
default:
1212
- windows_x64
1313
- linux_x64
14-
# - osx_x64 # Temporarily due to CI capacity constraints. Will re-enable once osx queues are more available.
14+
- windows_arm64
15+
- linux_arm64
16+
- osx_arm64
17+
- osx_x64
1518

1619
resources:
1720
repositories:
@@ -23,6 +26,7 @@ resources:
2326

2427
variables:
2528
- template: /eng/pipelines/common/variables.yml
29+
- template: /eng/pipelines/helix-platforms.yml
2630

2731
schedules:
2832
- cron: "30 2 * * *"
@@ -143,86 +147,60 @@ extends:
143147
condition: always()
144148

145149
#
146-
# cDAC Dump Creation — Build runtime, create crash dumps, publish dump artifacts
150+
# cDAC Dump Tests — Build, generate dumps, and run tests on Helix
147151
#
148-
- stage: DumpCreation
152+
- stage: CdacDumpTests
149153
dependsOn: []
150154
jobs:
151155
- template: /eng/pipelines/common/platform-matrix.yml
152156
parameters:
153157
jobTemplate: /eng/pipelines/common/global-build-job.yml
154158
buildConfig: release
155159
platforms: ${{ parameters.cdacDumpPlatforms }}
160+
shouldContinueOnError: true
156161
jobParameters:
157-
buildArgs: -s clr+libs+tools.cdac -c $(_BuildConfig) -rc $(_BuildConfig) -lc $(_BuildConfig)
158-
nameSuffix: CdacDumpGeneration
159-
timeoutInMinutes: 120
162+
nameSuffix: CdacDumpTest
163+
buildArgs: -s clr+libs+tools.cdac+tools.cdacdumptests -c $(_BuildConfig) -rc $(_BuildConfig) -lc $(_BuildConfig) /p:SkipDumpVersions=net10.0
164+
timeoutInMinutes: 180
160165
postBuildSteps:
166+
# Build debuggees (uses dotnet build via Exec for implicit NuGet restore)
161167
- script: $(Build.SourcesDirectory)$(dir).dotnet$(dir)dotnet$(exeExt) msbuild
162168
$(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
163-
/t:GenerateAllDumps
164-
/p:CIDumpVersionsOnly=true
165-
/p:SetDisableAuxProviderSignatureCheck=true
169+
/t:BuildDebuggeesOnly
170+
/p:Configuration=$(_BuildConfig)
166171
/p:TargetArchitecture=$(archType)
167-
-bl:$(Build.SourcesDirectory)/artifacts/log/DumpGeneration.binlog
168-
displayName: 'Generate cDAC Dumps'
169-
- template: /eng/pipelines/common/upload-artifact-step.yml
170-
parameters:
171-
rootFolder: $(Build.SourcesDirectory)/artifacts/dumps/cdac
172-
includeRootFolder: false
173-
archiveType: tar
174-
archiveExtension: .tar.gz
175-
tarCompression: gz
176-
artifactName: CdacDumps_$(osGroup)_$(archType)
177-
displayName: cDAC Dump Artifacts
172+
-bl:$(Build.SourcesDirectory)/artifacts/log/BuildDebuggees.binlog
173+
displayName: 'Build Debuggees'
174+
# Stage test binaries + debuggees + metadata into a Helix payload directory
175+
- script: $(Build.SourcesDirectory)$(dir).dotnet$(dir)dotnet$(exeExt) build
176+
$(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
177+
/p:PrepareHelixPayload=true
178+
/p:Configuration=$(_BuildConfig)
179+
/p:HelixPayloadDir=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac
180+
/p:SkipDumpVersions=net10.0
181+
-bl:$(Build.SourcesDirectory)/artifacts/log/DumpTestPayload.binlog
182+
displayName: 'Prepare Helix Payload'
183+
- pwsh: |
184+
$testhostDir = Get-ChildItem -Directory -Path "$(Build.SourcesDirectory)/artifacts/bin/testhost/net*" | Select-Object -First 1 -ExpandProperty FullName
185+
Write-Host "TestHost directory: $testhostDir"
186+
Write-Host "##vso[task.setvariable variable=TestHostPayloadDir]$testhostDir"
178187
179-
#
180-
# cDAC Dump Tests — Download dumps from all platforms, run tests cross-platform
181-
#
182-
- stage: DumpTest
183-
dependsOn:
184-
- DumpCreation
185-
jobs:
186-
- template: /eng/pipelines/common/platform-matrix.yml
187-
parameters:
188-
jobTemplate: /eng/pipelines/common/global-build-job.yml
189-
buildConfig: release
190-
platforms: ${{ parameters.cdacDumpPlatforms }}
191-
jobParameters:
192-
buildArgs: -s tools.cdacdumptests /p:SkipDumpVersions=net10.0
193-
nameSuffix: CdacDumpTests
194-
timeoutInMinutes: 60
195-
postBuildSteps:
196-
# Download and test against dumps from each platform
197-
- ${{ each dumpPlatform in parameters.cdacDumpPlatforms }}:
198-
- template: /eng/pipelines/common/download-artifact-step.yml
199-
parameters:
200-
artifactName: CdacDumps_${{ dumpPlatform }}
201-
artifactFileName: CdacDumps_${{ dumpPlatform }}.tar.gz
202-
unpackFolder: $(Build.SourcesDirectory)/artifacts/dumps/${{ dumpPlatform }}
203-
displayName: '${{ dumpPlatform }} Dumps'
204-
- script: $(Build.SourcesDirectory)$(dir).dotnet$(dir)dotnet$(exeExt) test
205-
$(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj
206-
--no-build
207-
--logger "trx;LogFileName=CdacDumpTests_${{ dumpPlatform }}.trx"
208-
--results-directory $(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/${{ dumpPlatform }}
209-
displayName: 'Run cDAC Dump Tests (${{ dumpPlatform }} dumps)'
210-
continueOnError: true
211-
env:
212-
CDAC_DUMP_ROOT: $(Build.SourcesDirectory)/artifacts/dumps/${{ dumpPlatform }}
213-
- task: PublishTestResults@2
214-
displayName: 'Publish Results ($(osGroup)-$(archType) → ${{ dumpPlatform }})'
215-
inputs:
216-
testResultsFormat: VSTest
217-
testResultsFiles: '**/*.trx'
218-
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(_BuildConfig)/${{ dumpPlatform }}'
219-
testRunTitle: 'cDAC Dump Tests $(osGroup)-$(archType) → ${{ dumpPlatform }}'
220-
failTaskOnFailedTests: true
221-
publishRunAttachments: true
222-
buildConfiguration: $(_BuildConfig)
223-
continueOnError: true
224-
condition: always()
225-
# Fail the job if any test or publish step above reported issues.
226-
- script: echo "One or more dump test steps failed." && exit 1
227-
displayName: 'Fail if tests failed'
228-
condition: eq(variables['Agent.JobStatus'], 'SucceededWithIssues')
188+
$queue = switch ("$(osGroup)_$(archType)") {
189+
"windows_x64" { "$(helix_windows_x64)" }
190+
"windows_arm64" { "$(helix_windows_arm64)" }
191+
"linux_x64" { "$(helix_linux_x64_oldest)" }
192+
"linux_arm64" { "$(helix_linux_arm64_oldest)" }
193+
"osx_x64" { "$(helix_macos_x64)" }
194+
"osx_arm64" { "$(helix_macos_arm64)" }
195+
}
196+
Write-Host "Helix queue: $queue"
197+
Write-Host "##vso[task.setvariable variable=CdacHelixQueue]$queue"
198+
displayName: 'Find TestHost Directory and Helix Queue'
199+
- template: /eng/pipelines/common/templates/runtimes/send-to-helix-inner-step.yml
200+
parameters:
201+
displayName: 'Send cDAC Dump Tests to Helix'
202+
sendParams: $(Build.SourcesDirectory)/src/native/managed/cdac/tests/DumpTests/cdac-dump-helix.proj /t:Test /p:TargetOS=$(osGroup) /p:TargetArchitecture=$(archType) /p:HelixTargetQueues=$(CdacHelixQueue) /p:TestHostPayload=$(TestHostPayloadDir) /p:DumpTestsPayload=$(Build.SourcesDirectory)/artifacts/helixPayload/cdac /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog
203+
environment:
204+
_Creator: dotnet-bot
205+
SYSTEM_ACCESSTOKEN: $(System.AccessToken)
206+
NUGET_PACKAGES: $(Build.SourcesDirectory)$(dir).packages

src/native/managed/cdac/tests/DumpTests/DumpTests.targets

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,13 @@
9494
Properties="DebuggeeName=%(_DebuggeeWithDumpTypes.Identity);_DebuggeeDumpTypes=%(_DebuggeeWithDumpTypes.DumpTypes)" />
9595
</Target>
9696

97+
<!-- Build all debuggees without running them (for Helix payload preparation).
98+
Uses dotnet build (via Exec) to ensure implicit NuGet restore, matching
99+
the pattern in _GenerateLocalDump. Invoke explicitly: dotnet msbuild /t:BuildDebuggeesOnly -->
100+
<Target Name="BuildDebuggeesOnly">
101+
<Exec Command="&quot;$(_DotNetExe)&quot; build &quot;%(DebuggeeCsproj.Identity)&quot; -c $(DebuggeeConfiguration) -f $(NetCoreAppCurrent) --nologo" />
102+
</Target>
103+
97104
<Target Name="_GenerateDumpsForDebuggee">
98105
<!-- Expand DumpTypes (e.g. "Heap;Full") into individual _DumpTypeItem entries -->
99106
<ItemGroup>

src/native/managed/cdac/tests/DumpTests/Microsoft.Diagnostics.DataContractReader.DumpTests.csproj

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,82 @@
3434
<PackageReference Include="coverlet.collector" Version="$(CoverletCollectorVersion)" />
3535
<PackageReference Include="Microsoft.Diagnostics.Runtime" Version="$(MicrosoftDiagnosticsRuntimeVersion)" />
3636
<PackageReference Include="Microsoft.DotNet.XUnitExtensions" Version="$(MicrosoftDotNetXUnitExtensionsVersion)" />
37+
<PackageReference Include="Microsoft.DotNet.XUnitConsoleRunner" Version="$(MicrosoftDotNetXUnitConsoleRunnerVersion)" />
3738
</ItemGroup>
39+
40+
<!--
41+
PrepareHelixPayload: Stages test output + debuggee binaries into a directory
42+
suitable for sending to Helix as a work item payload.
43+
44+
The layout is:
45+
$(HelixPayloadDir)/
46+
tests/ — test DLLs + xunit.console.dll + deps
47+
debuggees/{name}/ — built debuggee binaries
48+
debuggee-metadata.props — auto-generated _Debuggee items with DumpDir/MiniDumpType
49+
50+
Usage:
51+
dotnet build /p:PrepareHelixPayload=true
52+
/p:HelixPayloadDir=$(StagingDir)
53+
-->
54+
<Target Name="PrepareHelixPayload" AfterTargets="Build" Condition="'$(PrepareHelixPayload)' == 'true'">
55+
<PropertyGroup>
56+
<_HelixTestsDir>$([MSBuild]::NormalizeDirectory('$(HelixPayloadDir)', 'tests'))</_HelixTestsDir>
57+
<_HelixDebuggeesDir>$([MSBuild]::NormalizeDirectory('$(HelixPayloadDir)', 'debuggees'))</_HelixDebuggeesDir>
58+
</PropertyGroup>
59+
60+
<!-- Copy test output (DLLs, runtimeconfig, deps) -->
61+
<ItemGroup>
62+
<_TestOutput Include="$(OutputPath)**\*" />
63+
</ItemGroup>
64+
<Copy SourceFiles="@(_TestOutput)" DestinationFolder="$(_HelixTestsDir)%(RecursiveDir)" />
65+
66+
<!-- Copy xunit console runner files to tests directory -->
67+
<ItemGroup>
68+
<_XunitConsoleFiles Include="$([System.IO.Path]::GetDirectoryName('$(XunitConsoleNetCoreAppPath)'))\*" />
69+
</ItemGroup>
70+
<Copy SourceFiles="@(_XunitConsoleFiles)" DestinationFolder="$(_HelixTestsDir)" SkipUnchangedFiles="true" />
71+
72+
<!-- Copy each debuggee's build output -->
73+
<MSBuild Projects="$(MSBuildProjectFile)"
74+
Targets="_CopyDebuggeeToHelix"
75+
Properties="DebuggeeName=%(DebuggeeCsproj.Filename);_HelixDebuggeesDir=$(_HelixDebuggeesDir)" />
76+
77+
<!-- Query dump types from each debuggee csproj and generate a metadata props file
78+
so cdac-dump-helix.proj can discover debuggees without hardcoding them. -->
79+
<MSBuild Projects="@(DebuggeeCsproj)"
80+
Targets="GetDumpTypes"
81+
Properties="Configuration=$(DebuggeeConfiguration)">
82+
<Output TaskParameter="TargetOutputs" ItemName="_DebuggeeWithTypes" />
83+
</MSBuild>
84+
85+
<ItemGroup>
86+
<_HeapDebuggee Include="@(_DebuggeeWithTypes)" Condition="'%(DumpTypes)' == 'Heap'" DumpDir="heap" MiniDumpType="2" />
87+
<_FullDebuggee Include="@(_DebuggeeWithTypes)" Condition="'%(DumpTypes)' == 'Full'" DumpDir="full" MiniDumpType="4" />
88+
<_AllDebuggeeMetadata Include="@(_HeapDebuggee);@(_FullDebuggee)" />
89+
</ItemGroup>
90+
91+
<ItemGroup>
92+
<_MetadataLines Include="&lt;Project&gt;" />
93+
<_MetadataLines Include=" &lt;ItemGroup&gt;" />
94+
<_MetadataLines Include="@(_AllDebuggeeMetadata->' &lt;_Debuggee Include=&quot;%(Identity)&quot; DumpDir=&quot;%(DumpDir)&quot; MiniDumpType=&quot;%(MiniDumpType)&quot; /&gt;')" />
95+
<_MetadataLines Include=" &lt;/ItemGroup&gt;" />
96+
<_MetadataLines Include="&lt;/Project&gt;" />
97+
</ItemGroup>
98+
99+
<WriteLinesToFile File="$(HelixPayloadDir)/debuggee-metadata.props" Lines="@(_MetadataLines)" Overwrite="true" />
100+
101+
<Message Text="Helix payload prepared at $(HelixPayloadDir)" Importance="high" />
102+
</Target>
103+
104+
<Target Name="_CopyDebuggeeToHelix">
105+
<PropertyGroup>
106+
<_DebuggeeBinDir>$([MSBuild]::NormalizeDirectory('$(RepoRoot)', 'artifacts', 'bin', 'DumpTests', '$(DebuggeeName)', '$(DebuggeeConfiguration)', '$(NetCoreAppCurrent)'))</_DebuggeeBinDir>
107+
<_HelixDebuggeeDir>$([MSBuild]::NormalizeDirectory('$(_HelixDebuggeesDir)', '$(DebuggeeName)'))</_HelixDebuggeeDir>
108+
</PropertyGroup>
109+
110+
<ItemGroup>
111+
<_DebuggeeOutput Include="$(_DebuggeeBinDir)**\*" />
112+
</ItemGroup>
113+
<Copy SourceFiles="@(_DebuggeeOutput)" DestinationFolder="$(_HelixDebuggeeDir)%(RecursiveDir)" />
114+
</Target>
38115
</Project>
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<Project Sdk="Microsoft.DotNet.Helix.Sdk" DefaultTargets="Test">
2+
3+
<!--
4+
cdac-dump-helix.proj — Sends cDAC dump generation + testing to Helix.
5+
6+
This project defines a Helix work item that:
7+
1. Runs pre-built debuggee apps to produce crash dumps on Helix hardware
8+
2. Runs the cDAC dump tests against those dumps using xunit.console.dll
9+
10+
The testhost (locally-built runtime) is sent as a HelixCorrelationPayload.
11+
It provides the `dotnet` host used for running debuggees and executing tests.
12+
13+
Properties (set by pipeline or command line):
14+
HelixTargetQueues — Helix queue(s) to run on (set by eng/pipelines/runtime-diagnostics.yml)
15+
TestHostPayload — Path to testhost shared framework directory (contains dotnet host)
16+
DumpTestsPayload — Path to Helix payload directory (contains tests/, debuggees/, and
17+
debuggee-metadata.props generated by PrepareHelixPayload)
18+
TargetOS — Target OS (windows, linux, osx)
19+
TargetArchitecture — Target architecture (x64, arm64)
20+
-->
21+
22+
<PropertyGroup>
23+
<Language>msbuild</Language>
24+
<EnableAzurePipelinesReporter>true</EnableAzurePipelinesReporter>
25+
<EnableXUnitReporter>true</EnableXUnitReporter>
26+
<Creator>$(_Creator)</Creator>
27+
<WaitForWorkItemCompletion>true</WaitForWorkItemCompletion>
28+
<FailOnTestFailure>true</FailOnTestFailure>
29+
<HelixType>test/cdac/dumptests/</HelixType>
30+
<HelixBuild>$(BUILD_BUILDNUMBER)</HelixBuild>
31+
<HelixSource Condition="'$(HelixSource)' == ''">pr/dotnet/runtime/cdac-dump-tests</HelixSource>
32+
<WorkItemTimeout>01:00:00</WorkItemTimeout>
33+
</PropertyGroup>
34+
35+
<!--
36+
HelixTargetQueues is set by the pipeline YAML (eng/pipelines/runtime-diagnostics.yml)
37+
so that all Helix queue references stay centralized under eng/.
38+
-->
39+
40+
<!-- Send the testhost as a correlation payload (shared across work items, extracted once per machine) -->
41+
<ItemGroup>
42+
<HelixCorrelationPayload Include="$(TestHostPayload)">
43+
<PayloadDirectory>%(Identity)</PayloadDirectory>
44+
</HelixCorrelationPayload>
45+
</ItemGroup>
46+
47+
<!--
48+
Import debuggee metadata generated by PrepareHelixPayload.
49+
The props file contains _Debuggee items with DumpDir and MiniDumpType metadata,
50+
derived from each debuggee's DumpTypes property (Heap->heap/2, Full->full/4).
51+
-->
52+
<Import Project="$(DumpTestsPayload)/debuggee-metadata.props" />
53+
54+
<!--
55+
Helix work item command: generate dumps then run tests.
56+
57+
For each debuggee, runs it via the testhost dotnet with DOTNET_DbgEnableMiniDump=1
58+
to produce a crash dump, then runs xunit.console.dll against the dumps.
59+
60+
Windows uses & (runs next regardless of exit code — debuggees crash intentionally).
61+
Unix uses || true to reset failure from crashed debuggees so && chain continues.
62+
-->
63+
64+
<!-- Windows: dump generation + test commands -->
65+
<PropertyGroup Condition="'$(TargetOS)' == 'windows'">
66+
<_DumpGenCommands>@(_Debuggee->'mkdir %HELIX_WORKITEM_PAYLOAD%\dumps\local\%(DumpDir)\%(Identity) &amp; set "DOTNET_DbgMiniDumpType=%(MiniDumpType)" &amp; set "DOTNET_DbgMiniDumpName=%HELIX_WORKITEM_PAYLOAD%\dumps\local\%(DumpDir)\%(Identity)\%(Identity).dmp" &amp; %HELIX_CORRELATION_PAYLOAD%\dotnet.exe exec %HELIX_WORKITEM_PAYLOAD%\debuggees\%(Identity)\%(Identity).dll', ' &amp; ')</_DumpGenCommands>
67+
<_TestCommand>%HELIX_CORRELATION_PAYLOAD%\dotnet.exe exec --runtimeconfig %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.runtimeconfig.json --depsfile %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.deps.json %HELIX_WORKITEM_PAYLOAD%\tests\xunit.console.dll %HELIX_WORKITEM_PAYLOAD%\tests\Microsoft.Diagnostics.DataContractReader.DumpTests.dll -xml testResults.xml -nologo</_TestCommand>
68+
<_FullCommand>$(_DumpGenCommands) &amp; $(_TestCommand)</_FullCommand>
69+
</PropertyGroup>
70+
71+
<!-- Unix: dump generation + test commands -->
72+
<PropertyGroup Condition="'$(TargetOS)' != 'windows'">
73+
<_DumpGenCommands>@(_Debuggee->'mkdir -p $HELIX_WORKITEM_PAYLOAD/dumps/local/%(DumpDir)/%(Identity) &amp;&amp; DOTNET_DbgMiniDumpType=%(MiniDumpType) DOTNET_DbgMiniDumpName=$HELIX_WORKITEM_PAYLOAD/dumps/local/%(DumpDir)/%(Identity)/%(Identity).dmp $HELIX_CORRELATION_PAYLOAD/dotnet exec $HELIX_WORKITEM_PAYLOAD/debuggees/%(Identity)/%(Identity).dll || true', ' &amp;&amp; ')</_DumpGenCommands>
74+
<_TestCommand>$HELIX_CORRELATION_PAYLOAD/dotnet exec --runtimeconfig $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.runtimeconfig.json --depsfile $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.deps.json $HELIX_WORKITEM_PAYLOAD/tests/xunit.console.dll $HELIX_WORKITEM_PAYLOAD/tests/Microsoft.Diagnostics.DataContractReader.DumpTests.dll -xml testResults.xml -nologo</_TestCommand>
75+
<_FullCommand>$(_DumpGenCommands) &amp;&amp; $(_TestCommand)</_FullCommand>
76+
</PropertyGroup>
77+
78+
<!-- Pre-commands: enable dump generation and set dump root for tests -->
79+
<ItemGroup Condition="'$(TargetOS)' == 'windows'">
80+
<!-- Allow heap dump generation with the unsigned locally-built DAC -->
81+
<HelixPreCommand Include="reg add &quot;HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\MiniDumpSettings&quot; /v DisableAuxProviderSignatureCheck /t REG_DWORD /d 1 /f" />
82+
<HelixPreCommand Include="set DOTNET_DbgEnableMiniDump=1" />
83+
<HelixPreCommand Include="set CDAC_DUMP_ROOT=%HELIX_WORKITEM_PAYLOAD%\dumps" />
84+
</ItemGroup>
85+
<ItemGroup Condition="'$(TargetOS)' != 'windows'">
86+
<HelixPreCommand Include="export DOTNET_DbgEnableMiniDump=1" />
87+
<HelixPreCommand Include="export CDAC_DUMP_ROOT=$HELIX_WORKITEM_PAYLOAD/dumps" />
88+
<HelixPreCommand Include="chmod +x $HELIX_CORRELATION_PAYLOAD/dotnet" />
89+
</ItemGroup>
90+
91+
<PropertyGroup>
92+
<HelixPreCommands>@(HelixPreCommand)</HelixPreCommands>
93+
</PropertyGroup>
94+
95+
<!-- Single work item: generate dumps then run tests -->
96+
<ItemGroup>
97+
<HelixWorkItem Include="CdacDumpTests">
98+
<PayloadDirectory>$(DumpTestsPayload)</PayloadDirectory>
99+
<Command>$(_FullCommand)</Command>
100+
<Timeout>$(WorkItemTimeout)</Timeout>
101+
</HelixWorkItem>
102+
</ItemGroup>
103+
104+
</Project>

0 commit comments

Comments
 (0)