[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix - #129244

Merged
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups
Jun 14, 2026
Merged

[cdac] Pipeline refactor + StackWalk doc cleanup + DataGenerator build fix#129244
max-charlamb merged 4 commits into
dotnet:mainfrom
max-charlamb:cdac-followups

Conversation

@max-charlamb

@max-charlambmax-charlamb commented Jun 10, 2026

Copy link
Copy Markdown
Member

Note

This PR was prepared with assistance from GitHub Copilot CLI.

Consolidated follow-ups to #128872 covering the cDAC stages in runtime-diagnostics.yml plus a small datacontract doc cleanup.

Commits (oldest first)

  1. efe2cdeee14[cdac] StackWalk.md: drop stress-harness detail from datacontract
    The new "Signature-Based Scanning (currently deferred)" section reads like stress-harness README content. Replaced with a one-sentence note + link to tests/StressTests/known-issues.md (which already documents the stub, the sentinel, and the ICallingConvention work needed to re-enable the scan).

  2. 0e4caf52fd5[cdac] Fix DataGeneratorTests build: override Target.ReadNInt
    [cDAC] Implement delegate inspection DacDbi APIs #128784 added public abstract TargetNInt ReadNInt(ulong address) to Target but didn't update the test-only TestTarget mock, so DataGeneratorTests no longer compiles. Adds the missing override, mirroring ReadNUInt.

  3. ebc2c062fbf[cdac pipeline] Refactor runtime-diagnostics: share one build, run unit tests, parallelize per-platform
    See the commit message for the full detail. Highlights:

    • Shared CdacBuild stage so coreclr+libs is built ONCE per platform (Checked) and consumed by Dump / Stress / XPlatDumpGen / XPlatDumpTest legs.
    • Stress vs dump cDAC split: stress uses the Release native cDAC shim (in the shared testhost); dumps use Debug managed cDAC assemblies, with libraries pinned at Release + pre-flight verification.
    • Per-platform parallelism via job-level dependsOnGlobalBuilds: CdacBuild (the canonical runtime.yml pattern). CdacXPlatDumpTest adds an explicit per-source-platform dependsOn so the whole thing fits in one stage.
    • Stress tests now run on every trigger (previously gated to not Schedule).
    • CdacUnitTests runs the cDAC managed-side unit tests + DataGeneratorTests on linux_x64 Debug using a minimal -s tools.cdactests -test (modeled after eng/pipelines/coreclr/ilasm.yml:52). Also adds the previously-unbuilt DataGeneratorTests project to the tools.cdactests subset.
    • 3 new reusable templates (sos-test-leg.yml, cdac-helix-test-leg.yml, download-cdac-build-artifact.yml) compress ~250 lines of repeated boilerplate.
    • Top-of-file overview header summarizing every stage. Build -> SOSTests, Cdac -> CdacTests.
    • runtime-diagnostics.yml shrinks from 581 -> 351 lines.

Files changed

  • docs/design/datacontracts/StackWalk.md
  • eng/Subsets.props
  • eng/pipelines/runtime-diagnostics.yml
  • eng/pipelines/cdac/prepare-cdac-helix-steps.yml
  • eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
  • eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
  • eng/pipelines/diagnostics/sos-test-leg.yml (new)
  • src/native/managed/cdac/tests/DataGenerator/TestTarget.cs

Status

Draft. Local YAML parses; needs an end-to-end pipeline run on this branch to validate per-platform parallelism + Debug cDAC payload prep + CdacUnitTests minimal-subset build all work as expected.

Supersedes #129237 and #129241 (will close those).

Max Charlamband others added 3 commits June 10, 2026 11:26
The "Signature-Based Scanning (currently deferred)" section described
the stub state of GcScanner.PromoteCallerStack along with the
RecordDeferredFrame / CDAC_DEFERRED_FRAME sentinel mechanism the cDAC
stress harness uses. That content belongs in the stress test docs,
not in the StackWalk datacontract spec.
Replace the section with a one-sentence note in the GcScanRoots
dispatch list saying the fallback is currently stubbed and linking to
tests/StressTests/known-issues.md (which already documents the stub,
the sentinel, and the ICallingConvention work needed to re-enable
the scan) and tracking issue dotnet#127765.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
dotnet#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
Target but didn't update the test-only TestTarget mock in
DataGeneratorTests, so that project no longer compiles.
Add the missing override, mirroring the existing ReadNUInt pattern:
`new TargetNInt(PointerSize == 8 ? Read<long> : Read<int>)`.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…it tests, parallelize per-platform
Several related changes to the cDAC stages in runtime-diagnostics.yml:
1. Add a shared CdacBuild stage so coreclr+libs is built ONCE per
platform (Checked runtime, Release cDAC), with its output published
as a CdacBuildArtifacts_<plat> tar. Dump tests, stress tests, and
the x-plat dump-gen leg all download this artifact instead of each
running their own full clr+libs+tools.cdac+... build.
2. Wire test legs to consume the artifact. Each test leg still runs a
tiny `-s tools.cdac<X>tests` to initialize .dotnet and rebuild the
test csproj; the heavy coreclr/libs build is skipped.
3. Stress vs dump cDAC split:
- Stress tests use the Release native cDAC shim, which ships in the
shared testhost CdacBuild publishes.
- Dump tests use the Debug managed cDAC assemblies. prepare-cdac-
helix-steps.yml gains a cdacTestConfig parameter (defaults to
$(_BuildConfig) for back-compat); dump legs pass Debug so MSBuild
rebuilds the managed cDAC + DumpTests in Debug during payload prep.
A librariesConfiguration parameter pins libraries at Release so
the cdacTestConfig override never causes MSBuild to look for Debug
libraries; a pre-flight check verifies that.
4. Per-platform parallelism. Originally each test stage used stage-
level dependsOn (all-or-nothing -- linux_x64 tests waited for
osx_arm64 to finish building). Move CdacBuild + CdacDumpTest +
CdacStressTest + CdacXPlatDumpGen + CdacXPlatDumpTest into a single
CdacTests stage and use job-level dependsOnGlobalBuilds: CdacBuild
(the canonical runtime.yml pattern at lines 1591,1622,1653) for
per-platform parallelism. CdacXPlatDumpTest additionally uses an
explicit dependsOn list to fan-in on every source platform's
CdacXPlatDumpGen, removing the need for a separate stage.
5. New CdacUnitTests stage runs the cDAC managed-side unit tests +
DataGenerator tests on linux_x64 Checked via the existing
tools.cdactests subset (extended in eng/Subsets.props to include
the previously-unbuilt DataGeneratorTests project alongside
UnitTests). Modeled after eng/pipelines/coreclr/ilasm.yml:52's
minimal `-s tools.X -test` pattern.
6. Stress tests now run on every trigger (previously gated to not
Schedule); the same Checked artifact CdacBuild publishes is what
they need.
Holistic readability cleanup:
- Top-of-file pipeline overview header summarizes every stage, its
trigger gating, and its dependency model so a reader gets the whole
pipeline shape on screen one.
- Build stage renamed SOSTests (its actual purpose), Cdac stage
renamed CdacTests.
- Extract three reusable templates:
eng/pipelines/diagnostics/sos-test-leg.yml -- the SOS legs
(cDAC/cDAC_no_fallback/DAC) were 3 nearly identical 50-line
blocks differing only in `name`/`useCdac`/`noFallback`. Now 3
4-line invocations.
eng/pipelines/cdac/cdac-helix-test-leg.yml -- the dump-style
legs (CdacDumpTest/CdacXPlatDumpGen/CdacXPlatDumpTest) shared
the same artifact-download + prepare + send + fail-on-error
shape. Parameterized over nameSuffix/platforms/sendParams/etc.
eng/pipelines/cdac/download-cdac-build-artifact.yml -- 4-copy
preBuildSteps block compressed to a one-line template ref.
Net: runtime-diagnostics.yml shrinks from 581 to 351 lines while the
behavior expands.
Files:
- eng/pipelines/runtime-diagnostics.yml
- eng/pipelines/cdac/prepare-cdac-helix-steps.yml
- eng/pipelines/cdac/cdac-helix-test-leg.yml (new)
- eng/pipelines/cdac/download-cdac-build-artifact.yml (new)
- eng/pipelines/diagnostics/sos-test-leg.yml (new)
- eng/Subsets.props -- DataGeneratorTests project added to
tools.cdactests subset.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR updates the cDAC/diagnostics CI pipeline definitions to reduce duplication (shared builds + reusable job templates), adds missing test build coverage for cDAC DataGenerator tests, and trims the StackWalk datacontract documentation around the currently-deferred signature-scanning path.

Changes:

  • Fix cDAC DataGeneratorTests compilation by adding the missing ReadNInt override to the test Target mock.
  • Add Microsoft.Diagnostics.DataContractReader.DataGeneratorTests.csproj to the tools.cdactests subset so it’s built/run in CI.
  • Refactor eng/pipelines/runtime-diagnostics.yml (new stages/templates, shared cDAC build artifact flow) and update cDAC Helix payload prep to support Debug cDAC assemblies while keeping libraries pinned.

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
FileDescription
docs/design/datacontracts/StackWalk.mdRemoves detailed deferred signature-scan discussion; replaces with a short note + links.
eng/Subsets.propsAdds DataGeneratorTests to tools.cdactests subset.
eng/pipelines/runtime-diagnostics.ymlMajor pipeline refactor: stage layout, shared cDAC build artifact, and template-based test legs.
eng/pipelines/cdac/prepare-cdac-helix-steps.ymlAdds cDAC test configuration parameters + a libraries-output preflight check.
eng/pipelines/cdac/cdac-helix-test-leg.ymlNew reusable template for dump-style Helix legs (dump tests, xplat gen/test).
eng/pipelines/cdac/download-cdac-build-artifact.ymlNew reusable step template to download/extract shared CdacBuild artifacts.
eng/pipelines/diagnostics/sos-test-leg.ymlNew reusable template for SOS-style test legs on windows_x64.
src/native/managed/cdac/tests/DataGenerator/TestTarget.csImplements ReadNInt to match updated Target abstract surface.

Comment threadeng/pipelines/runtime-diagnostics.yml Outdated
Comment threadeng/pipelines/runtime-diagnostics.yml
Comment threadeng/pipelines/cdac/prepare-cdac-helix-steps.yml Outdated
…e convention
Three small changes on top of the previous pipeline refactor commit:
1. Rename DataGeneratorTests.csproj -> DataGenerator.Tests.csproj
Arcade SDK's Tests.props gates the `Test` target on IsUnitTestProject
which is auto-set only when MSBuildProjectName.EndsWith('.UnitTests')
or EndsWith('.Tests'). The csproj name `DataGeneratorTests.csproj`
ends in "Tests" but has no leading dot, so IsUnitTestProject stayed
false, the Test target was skipped, and zero DataGen tests ran in CI
(verified against build 1458128 -- all 501 published results came
from Microsoft.Diagnostics.DataContractReader.Tests). Adding the dot
matches the UnitTests project (.Tests.csproj) convention.
Updates eng/Subsets.props and src/native/managed/cdac/cdac.slnx
references too.
2. prepare-cdac-helix-steps.yml: drop the libraries-configuration
pre-flight check. It was belt-and-suspenders that added nothing
real -- if the libs are misaligned, the subsequent dotnet build
fails with a clear unresolved-reference error. Also fixes the
suffix-glob bug Copilot reviewer flagged.
3. runtime-diagnostics.yml header tweaks: overview now correctly says
"3 SOS legs" (cDAC, cDAC_no_fallback, DAC) with testInterpreter
inline, "CdacUnitTests linux_x64 Debug" matches the actual matrix
config, and the Build stage comment about FEATURE_INTERPRETER is
reworded for the no-separate-Interpreter-leg model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

CopilotAI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 10 changed files in this pull request and generated 1 comment.

Comment threadeng/pipelines/runtime-diagnostics.yml
@max-charlamb

Copy link
Copy Markdown
MemberAuthor

/ba-g known test failures

@max-charlamb
max-charlamb merged commit 97091e2 into dotnet:mainJun 14, 2026
197 of 204 checks passed
@max-charlamb
max-charlamb deleted the cdac-followups branch June 14, 2026 14:02
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-preview6 milestone Jun 17, 2026
eiriktsarpalis pushed a commit that referenced this pull request Jul 15, 2026
…d fix (#129244)
> [!NOTE]
> This PR was prepared with assistance from GitHub Copilot CLI.
Consolidated follow-ups to #128872 covering the cDAC stages in
`runtime-diagnostics.yml` plus a small datacontract doc cleanup.
## Commits (oldest first)
1. **`efe2cdeee14`** — `[cdac] StackWalk.md: drop stress-harness detail
from datacontract`
The new "Signature-Based Scanning (currently deferred)" section reads
like stress-harness README content. Replaced with a one-sentence note +
link to `tests/StressTests/known-issues.md` (which already documents the
stub, the sentinel, and the ICallingConvention work needed to re-enable
the scan).
2. **`0e4caf52fd5`** — `[cdac] Fix DataGeneratorTests build: override
Target.ReadNInt`
#128784 added `public abstract TargetNInt ReadNInt(ulong address)` to
`Target` but didn't update the test-only `TestTarget` mock, so
`DataGeneratorTests` no longer compiles. Adds the missing override,
mirroring `ReadNUInt`.
3. **`ebc2c062fbf`** — `[cdac pipeline] Refactor runtime-diagnostics:
share one build, run unit tests, parallelize per-platform`
See the commit message for the full detail. Highlights:
- **Shared `CdacBuild`** stage so coreclr+libs is built ONCE per
platform (Checked) and consumed by Dump / Stress / XPlatDumpGen /
XPlatDumpTest legs.
- **Stress vs dump cDAC split**: stress uses the Release native cDAC
shim (in the shared testhost); dumps use Debug managed cDAC assemblies,
with libraries pinned at Release + pre-flight verification.
- **Per-platform parallelism** via job-level `dependsOnGlobalBuilds:
CdacBuild` (the canonical `runtime.yml` pattern). `CdacXPlatDumpTest`
adds an explicit per-source-platform `dependsOn` so the whole thing fits
in one stage.
- **Stress tests now run on every trigger** (previously gated to not
Schedule).
- **`CdacUnitTests`** runs the cDAC managed-side unit tests +
DataGeneratorTests on linux_x64 Debug using a minimal `-s
tools.cdactests -test` (modeled after
`eng/pipelines/coreclr/ilasm.yml:52`). Also adds the previously-unbuilt
DataGeneratorTests project to the `tools.cdactests` subset.
- **3 new reusable templates** (`sos-test-leg.yml`,
`cdac-helix-test-leg.yml`, `download-cdac-build-artifact.yml`) compress
~250 lines of repeated boilerplate.
- Top-of-file overview header summarizing every stage. `Build` ->
`SOSTests`, `Cdac` -> `CdacTests`.
- `runtime-diagnostics.yml` shrinks from 581 -> 351 lines.
## Files changed
- `docs/design/datacontracts/StackWalk.md`
- `eng/Subsets.props`
- `eng/pipelines/runtime-diagnostics.yml`
- `eng/pipelines/cdac/prepare-cdac-helix-steps.yml`
- `eng/pipelines/cdac/cdac-helix-test-leg.yml` (new)
- `eng/pipelines/cdac/download-cdac-build-artifact.yml` (new)
- `eng/pipelines/diagnostics/sos-test-leg.yml` (new)
- `src/native/managed/cdac/tests/DataGenerator/TestTarget.cs`
## Status
Draft. Local YAML parses; needs an end-to-end pipeline run on this
branch to validate per-platform parallelism + Debug cDAC payload prep +
`CdacUnitTests` minimal-subset build all work as expected.
Supersedes #129237 and #129241 (will close those).
---------
Co-authored-by: Max Charlamb <maxcharlamb@microsoft.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jul 18, 2026
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@max-charlamb@steveisok