diff --git a/eng/pipelines/common/evaluate-default-paths.yml b/eng/pipelines/common/evaluate-default-paths.yml
index dba1aaad202b60..4874c6b6ffcb1c 100644
--- a/eng/pipelines/common/evaluate-default-paths.yml
+++ b/eng/pipelines/common/evaluate-default-paths.yml
@@ -114,6 +114,8 @@ jobs:
- ${{ parameters._const_paths._wasm_specific_only }}
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
- subset: mono_excluding_wasm
@@ -126,6 +128,8 @@ jobs:
- ${{ parameters._const_paths._wasm_specific_only }}
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
- eng/Version.Details.xml
@@ -158,6 +162,8 @@ jobs:
- ${{ parameters._const_paths._wasm_specific_only }}
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
- subset: runtimetests
@@ -198,6 +204,8 @@ jobs:
- ${{ parameters._const_paths._wasm_specific_only }}
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
# We have limited Apple Silicon testing capacity
@@ -267,6 +275,8 @@ jobs:
- ${{ parameters._const_paths._wasm_pipelines }}
exclude:
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
# wasm/runtimetests mono need to be run
@@ -289,6 +299,8 @@ jobs:
- src/mono/wasm/Wasm.Build.Tests/*
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
# wasm/runtimetests coreCLR need to be run
@@ -302,6 +314,8 @@ jobs:
- src/mono/*
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
# Wasm-specific paths excluding Wasm.Build.Tests, WASI (build/runtime/testassets), and the debugger
@@ -331,6 +345,8 @@ jobs:
- src/mono/nuget/Microsoft.NET.Workload*
- src/mono/nuget/Microsoft.NETCore.BrowserDebugHost.Transport/*
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
- subset: wasm_chrome
@@ -344,6 +360,8 @@ jobs:
- ${{ parameters._const_paths._wasm_specific_only }}
- ${{ parameters._const_paths._wasm_pipelines }}
- ${{ parameters._const_paths._always_exclude }}
+ - ${{ if eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge') }}:
+ - eng/pipelines/runtime.yml
- ${{ parameters._const_paths._perf_pipeline_specific_only }}
- eng/testing/tests.mobile.targets
- src/mono/*
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 9fabe16d48fd80..9759b94d7e1d3e 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -557,14 +557,25 @@ extends:
testRunNamePrefixSuffix: coreclr_checked
testScope: innerloop
useHelixMonitor: ${{ variables.enableHelixJobMonitor }}
+ # Temporary opt-in for this diagnostic PR's Windows x86 checked-libraries leg only.
condition: >-
or(
eq(variables['coreclrContainsChange'], true),
- eq(variables['isRollingBuild'], true))
+ eq(variables['isRollingBuild'], true),
+ and(
+ eq(variables['Build.Reason'], 'PullRequest'),
+ eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge'),
+ eq(variables['osGroup'], 'windows'),
+ eq(variables['archType'], 'x86')))
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
- eq(variables['isRollingBuild'], true))
+ eq(variables['isRollingBuild'], true),
+ and(
+ eq(variables['Build.Reason'], 'PullRequest'),
+ eq(variables['Build.SourceBranch'], 'refs/pull/131907/merge'),
+ eq(variables['osGroup'], 'windows'),
+ eq(variables['archType'], 'x86')))
- template: /eng/pipelines/common/platform-matrix.yml
parameters:
diff --git a/src/libraries/System.Diagnostics.Process/README.md b/src/libraries/System.Diagnostics.Process/README.md
index c1c29f88d6dc86..da3889a238cffb 100644
--- a/src/libraries/System.Diagnostics.Process/README.md
+++ b/src/libraries/System.Diagnostics.Process/README.md
@@ -11,3 +11,18 @@ See the [Help Wanted](https://github.com/dotnet/runtime/issues?q=is%3Aopen+is%3A
## Deployment
`System.Diagnostics.Process` is included in the shared framework. The package does not need to be installed into any project compatible with .NET Standard 2.0.
+
+## Helix test partitions
+
+Windows x86 CoreCLR console-runner test archives are divided into six Helix work items.
+Each archive contains the same test assembly and supporting files, with a class filter in its
+generated runner script. Each work item has its own payload, results, temporary files, and
+test process. The existing assembly-level collection behavior is unchanged within each process.
+
+The partitions are balanced using matched x86 CI timings, with headroom for slower executions
+and work-item setup. The goal is five minutes or less per work item; the normal Helix timeout
+is not reduced or increased. All rows of a theory stay together with their class.
+The final partition excludes the classes in the first five, so new classes remain covered.
+
+The ordinary local runner still executes the full suite. Other architectures, Mono, mobile,
+NativeAOT, and other single-file runners keep their existing unpartitioned archives.
diff --git a/src/libraries/System.Diagnostics.Process/tests/ProcessTestShards.targets b/src/libraries/System.Diagnostics.Process/tests/ProcessTestShards.targets
new file mode 100644
index 00000000000000..4559cb886cfc63
--- /dev/null
+++ b/src/libraries/System.Diagnostics.Process/tests/ProcessTestShards.targets
@@ -0,0 +1,73 @@
+
+
+ <_ProcessTestShardDefinition>$(MSBuildThisFileFullPath)
+ <_ShardProcessTests Condition="'$(ArchiveTests)' == 'true' and
+ '$(TargetPlatformIdentifier)' == 'windows' and
+ '$(TargetArchitecture)' == 'x86' and
+ '$(RuntimeFlavor)' == 'CoreCLR' and
+ '$(TestSingleFile)' != 'true'">true
+
+
+
+ <_ProcessTestShard Include="1" Arguments="-class System.Diagnostics.Tests.ProcessMultiplexingTests" />
+ <_ProcessTestShard Include="2" Arguments="-class System.Diagnostics.Tests.ProcessStreamingTests -class System.Diagnostics.Tests.SafeProcessHandleTests" />
+ <_ProcessTestShard Include="3" Arguments="-class System.Diagnostics.Tests.ProcessTests -class System.Diagnostics.Tests.StartSuspendedTests -class System.Diagnostics.Tests.StartAndForgetTests -class System.Diagnostics.Tests.ProcessCollectionTests -class System.Diagnostics.Tests.ProcessExitStatusTests" />
+ <_ProcessTestShard Include="4" Arguments="-class System.Diagnostics.Tests.ProcessHandlesTests -class System.Diagnostics.Tests.ProcessStartInfoTests" />
+ <_ProcessTestShard Include="5" Arguments="-class System.Diagnostics.Tests.RunTests -class System.Diagnostics.Tests.ProcessWaitingTests -class System.Diagnostics.Tests.ProcessOpenTests -class System.Diagnostics.Tests.ProcessStandardConsoleTests -class System.Diagnostics.Tests.ProcessModuleTests -class System.Diagnostics.Tests.ProcessThreadTests" />
+
+ <_ProcessTestShard Include="6" Arguments="-noclass System.Diagnostics.Tests.ProcessMultiplexingTests -noclass System.Diagnostics.Tests.ProcessStreamingTests -noclass System.Diagnostics.Tests.SafeProcessHandleTests -noclass System.Diagnostics.Tests.ProcessTests -noclass System.Diagnostics.Tests.StartSuspendedTests -noclass System.Diagnostics.Tests.StartAndForgetTests -noclass System.Diagnostics.Tests.ProcessCollectionTests -noclass System.Diagnostics.Tests.ProcessExitStatusTests -noclass System.Diagnostics.Tests.ProcessHandlesTests -noclass System.Diagnostics.Tests.ProcessStartInfoTests -noclass System.Diagnostics.Tests.RunTests -noclass System.Diagnostics.Tests.ProcessWaitingTests -noclass System.Diagnostics.Tests.ProcessOpenTests -noclass System.Diagnostics.Tests.ProcessStandardConsoleTests -noclass System.Diagnostics.Tests.ProcessModuleTests -noclass System.Diagnostics.Tests.ProcessThreadTests" />
+
+
+
+
+ <_ProcessTestPayload Include="$(OutDir)**\*" Exclude="$(RunScriptOutputPath)" />
+
+
+
+
+
+ <_ProcessTestShardDirectory>$(IntermediateOutputPath)process-test-shards\%(_ProcessTestShard.Identity)\
+
+
+ <_ProcessTestShardRunCommands Remove="@(_ProcessTestShardRunCommands)" />
+ <_ProcessTestShardRunCommands Include="$([System.IO.File]::ReadAllText('$(PreExecutionTestScript)'))"
+ Condition="'$(PreExecutionTestScript)' != ''" />
+ <_ProcessTestShardRunCommands Include="$(RunScriptCommand) %(_ProcessTestShard.Arguments)" />
+ <_ProcessTestShardRunCommands Include="@(PostRunScriptCommands)" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
index 100ff174567dab..d3ee2f4468f95c 100644
--- a/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
+++ b/src/libraries/System.Diagnostics.Process/tests/System.Diagnostics.Process.Tests.csproj
@@ -119,4 +119,5 @@
+