Skip to content

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@premun@mmitche@akoeplinger@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Enable Helix Job Monitor for the runtime pipeline by premun · Pull Request #129690 · dotnet/runtime · GitHub
Skip to content

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@premun@mmitche@akoeplinger@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Enable Helix Job Monitor for the runtime pipeline by premun · Pull Request #129690 · dotnet/runtime · GitHub
Skip to content

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@premun@mmitche@akoeplinger@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Enable Helix Job Monitor for the runtime pipeline by premun · Pull Request #129690 · dotnet/runtime · GitHub
Skip to content

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@premun@mmitche@akoeplinger@jkoritzinsky
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Enable Helix Job Monitor for the runtime pipeline by premun · Pull Request #129690 · dotnet/runtime · GitHub
Skip to content

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

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

Enable Helix Job Monitor for the runtime pipeline - #129690

Merged
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased
Aug 4, 2026
Merged

Enable Helix Job Monitor for the runtime pipeline#129690
premun merged 37 commits into
dotnet:mainfrom
premun:prvysoky/helix-job-monitor-rebased

Conversation

@premun

@premunpremun commented Jun 22, 2026

Copy link
Copy Markdown
Member
  • Add useHelixMonitor parameter to all helix pipeline templates
  • Enable Helix Monitor in runtime.yml for all test legs
  • Add helix-job-monitor.yml template job at the top of the Build stage
  • Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
  • Pass EnableHelixJobMonitor MSBuild property through send-to-helix

dotnet/arcade#16731

@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to this area: @akoeplinger, @matouskozak, @simonrozsival
See info in area-owners.md if you want to be subscribed.

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 wires up Helix Job Monitor support across the runtime Azure DevOps pipelines by introducing a useHelixMonitor parameter through the relevant YAML templates, enabling it for the runtime pipeline test legs, and adding the Helix Job Monitor .NET tool/dependency so the monitor job can run.

Changes:

  • Add a HelixJobMonitor job to eng/pipelines/runtime.yml (Build stage) using the shared eng/common template.
  • Plumb a useHelixMonitor parameter through Helix-related pipeline templates and pass /p:EnableHelixJobMonitor=... through the various “send to helix” paths.
  • Add Microsoft.DotNet.Helix.JobMonitor tool/dependency and pin it in .config/dotnet-tools.json.

Reviewed changes

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

Show a summary per file
FileDescription
eng/Version.Details.xmlAdds the Microsoft.DotNet.Helix.JobMonitor toolset dependency entry.
eng/Version.Details.propsAdds version properties for the Helix Job Monitor dependency.
eng/pipelines/runtime.ymlAdds the Helix Job Monitor job and enables useHelixMonitor: true across runtime pipeline test legs.
eng/pipelines/libraries/run-test-job.ymlIntroduces useHelixMonitor parameter and forwards it into the libraries Helix submission step.
eng/pipelines/libraries/helix.ymlAccepts useHelixMonitor and passes /p:EnableHelixJobMonitor=... into sendtohelix.proj.
eng/pipelines/installer/helix.ymlAdds useHelixMonitor, but currently passes UseHelixMonitor into /eng/common/templates/steps/send-to-helix.yml (template parameter mismatch; needs fix).
eng/pipelines/coreclr/nativeaot-post-build-steps.ymlAdds useHelixMonitor pass-through to the shared runtime test+Helix submit template.
eng/pipelines/common/templates/wasm-runtime-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/wasm-library-aot-tests.ymlAdds and forwards useHelixMonitor into nested wasm templates.
eng/pipelines/common/templates/wasm-coreclr-library-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path.
eng/pipelines/common/templates/simple-wasm-build-tests.ymlAdds and forwards useHelixMonitor into the Helix submission path for WBT scenarios.
eng/pipelines/common/templates/runtimes/send-to-helix-step.ymlAdds useHelixMonitor and includes /p:EnableHelixJobMonitor=... in the computed send parameters.
eng/pipelines/common/templates/runtimes/run-test-job.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.ymlAdds useHelixMonitor parameter and forwards it to send-to-helix-step.yml.
eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.ymlHard-enables useHelixMonitor: true for the CoreCLR Wasm.Build.Tests Helix submission.
eng/pipelines/common/templates/browser-wasm-build-tests.ymlAdds and forwards useHelixMonitor for non-CoreCLR WBT Helix submissions.
.config/dotnet-tools.jsonAdds the microsoft.dotnet.helix.jobmonitor tool entry and pins its version.

Comment threadeng/pipelines/installer/helix.yml
CopilotAI review requested due to automatic review settings June 22, 2026 09:25

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 18 out of 19 changed files in this pull request and generated 2 comments.

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/common/core-templates/steps/send-to-helix.yml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 13:34
premunand others added 6 commits June 22, 2026 15:34
- Add useHelixMonitor parameter to all helix pipeline templates
- Enable Helix Monitor in runtime.yml for all test legs
- Add helix-job-monitor.yml template job at the top of the Build stage
- Add Microsoft.DotNet.Helix.JobMonitor dependency (same version as Arcade)
- Pass EnableHelixJobMonitor MSBuild property through send-to-helix
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@premun
premunforce-pushed the prvysoky/helix-job-monitor-rebased branch from 20899d1 to 624f97dCompareJune 22, 2026 13:35

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comment threadeng/common/core-templates/steps/send-to-helix.yml
Comment threadeng/pipelines/runtime.yml
Comment threadeng/Version.Details.xml Outdated
CopilotAI review requested due to automatic review settings June 22, 2026 20:53

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 18 out of 19 changed files in this pull request and generated 3 comments.

Comments suppressed due to low confidence (1)

eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml:145

  • This template hard-codes useHelixMonitor: true when invoking the libraries Helix template. Since other Helix templates were updated to accept a useHelixMonitor parameter (defaulting to false) and runtime.yml is now explicitly setting it, this hard-coded true makes the behavior inconsistent and harder to roll back/experiment with.

Consider adding a useHelixMonitor parameter to this template (default false) and threading it through instead of hard-coding true.

 testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)_$(_hostedOs)
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
useHelixMonitor: true

Comment threadeng/pipelines/runtime.yml Outdated
Comment threadeng/pipelines/runtime.yml
Comment threadeng/common/core-templates/steps/send-to-helix.yml
CopilotAI review requested due to automatic review settings August 3, 2026 09:27

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/pipelines/common/variables.yml:50

  • enableHelixJobMonitor is set to true unconditionally, which turns on the new Helix monitor path for all runtime.yml runs immediately. The linked arcade rollout plan for HRJ/Job Monitor describes a phased rollout (including a dual-mode period). Consider defaulting this to false (or scoping it to specific pipelines/stages) so the feature can be enabled gradually and rolled back via variable override if needed.
- name: enableHelixJobMonitor
value: true

global.json:18

  • The PR description says the Helix Job Monitor dependency is the same version as Arcade, but global.json keeps Microsoft.DotNet.Arcade.Sdk at 11.0.0-beta.26365.101 while Microsoft.DotNet.Helix.Sdk is bumped to 11.0.0-beta.26381.1 (and dotnet-tools.json pins the monitor tool to 11.0.0-beta.26381.1). Please clarify whether this version skew is intentional; if not, align the Arcade SDK version with the Helix/JobMonitor build you’re taking.
 "msbuild-sdks": {
"Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

eng/Version.Details.xml:73

  • This change also updates Microsoft.DotNet.GenAPI (version+SHA) and moves Microsoft.DotNet.Helix.Sdk’s source URI from dotnet/dotnet to dotnet/arcade. If these dependency updates are required for Helix Job Monitor enablement, it would help to call that out explicitly (or otherwise keep this PR focused by avoiding unrelated toolset churn).
 <Dependency Name="Microsoft.DotNet.Helix.Sdk" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.Helix.JobMonitor" Version="11.0.0-beta.26381.1">
<Uri>https://github.com/dotnet/arcade</Uri>
<Sha>93eebf1a31a5eaafd44326f1a81ca107913e098c</Sha>
</Dependency>
<Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>
</Dependency>

…nitor-rebased
# Conflicts:
#	eng/pipelines/runtime.yml
CopilotAI review requested due to automatic review settings August 3, 2026 15:35

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (3)

eng/Version.Details.xml:72

  • This change updates Microsoft.DotNet.GenAPI to 11.0.0-beta.26363.117 (and a different SHA) as part of the Helix/JobMonitor update. Since the PR description doesn't mention GenAPI and this appears unrelated to Helix Job Monitor enablement, it would be good to either justify why this version shift is required here or split it into a separate dependency update PR.
 <Dependency Name="Microsoft.DotNet.GenAPI" Version="11.0.0-beta.26363.117">
<Uri>https://github.com/dotnet/dotnet</Uri>
<Sha>b25932e8d128b5242f1d89691f8e8171b82774c0</Sha>

eng/pipelines/runtime.yml:71

  • The Helix job monitor template defaults allowNoHelixJobs to false (see /eng/common/core-templates/job/helix-job-monitor.yml). Since this job is enabled here whenever enableHelixJobMonitor is true, the Build stage can legitimately produce zero Helix submissions (e.g., PRs where all Helix legs are skipped by path conditions), which would make the monitor job fail. Consider opting in to allowNoHelixJobs: true here (or gate the job on a condition that guarantees at least one Helix submission).
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

global.json:18

  • PR description says the new Microsoft.DotNet.Helix.JobMonitor dependency is "same version as Arcade", but global.json still pins Microsoft.DotNet.Arcade.Sdk to 11.0.0-beta.26365.101 while Helix SDK/JobMonitor are 11.0.0-beta.26381.1. If the intent is version parity with Arcade, the Arcade SDK version (and any derived dependency metadata) likely needs to be updated too, or the PR description should be adjusted to match the actual versioning approach.
 "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26365.101",
"Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26381.1",
"Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26365.101",

…nitor-rebased
# Conflicts:
#	eng/Version.Details.props
#	eng/Version.Details.xml
#	eng/common/core-templates/job/helix-job-monitor.yml
#	global.json
CopilotAI review requested due to automatic review settings August 4, 2026 13:15

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 21 out of 22 changed files in this pull request and generated no new comments.

Suppressed comments (2)

eng/Version.Details.props:12

  • This change introduces a duplicate property. The file already defines MicrosoftDotNetHelixSdkPackageVersion later in the same PropertyGroup, so the later (older) value will win and the Helix SDK version update won’t actually take effect.
 <!-- dotnet-arcade dependencies -->
<MicrosoftDotNetHelixJobMonitorPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixJobMonitorPackageVersion>
<MicrosoftDotNetHelixSdkPackageVersion>11.0.0-beta.26381.1</MicrosoftDotNetHelixSdkPackageVersion>
<!-- dotnet-dotnet dependencies -->
<MicrosoftCodeAnalysisPackageVersion>5.10.0-1.26379.102</MicrosoftCodeAnalysisPackageVersion>

eng/pipelines/runtime.yml:71

  • The Helix job monitor is added unconditionally when enableHelixJobMonitor is true, but the template defaults allowNoHelixJobs=false. If a Build stage run ends up producing zero Helix jobs (e.g., path-based conditions skip all Helix legs), the monitor job may fail the stage. Consider opting into allowNoHelixJobs for runtime.yml to avoid spurious failures.
 - ${{ if eq(variables['enableHelixJobMonitor'], true) }}:
- template: /eng/common/core-templates/job/helix-job-monitor.yml
parameters:
helixAccessToken: $(HelixApiAccessToken)
timeoutInMinutes: 540

@premun
premun enabled auto-merge (squash) August 4, 2026 17:09
@mmitche

Copy link
Copy Markdown
Member

/ba-g Unrelated test feailures

@premun
premun merged commit 7dfe2b5 into dotnet:mainAug 4, 2026
211 of 213 checks passed
@premun
premun deleted the prvysoky/helix-job-monitor-rebased branch August 4, 2026 21:16
@dotnet-milestone-botdotnet-milestone-botBot added this to the 11.0-rc1 milestone Aug 5, 2026
rcj1 added a commit that referenced this pull request Aug 9, 2026
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After #129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes #131979 > [!NOTE]
> This content was created with assistance from AI.
mmitche added a commit that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in #129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
)
## Summary
Disable the Helix Job Monitor for cDAC cross-platform dump generation.
This restores the previous synchronous behavior where the submitting
job:
1. Waits for Helix work to complete.
2. Downloads `dumps.tar.gz` into `artifacts/helixresults`.
3. Publishes the dumps for the dependent cross-platform test jobs.
## Root cause
After dotnet#129690 enabled the Helix Job Monitor globally, `SendHelixJob`
began returning immediately after submission. The cDAC dump-generation
flow requires `DownloadFilesFromResults`, but the monitor does not
download those artifacts for the submitting job.
Consequently, `Publish Dump Artifacts` runs before
`artifacts/helixresults` exists, although the Helix work items later
complete successfully.
Fixes dotnet#131979 > [!NOTE]
> This content was created with assistance from AI.
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Aug 11, 2026
## Summary
- default `enableHelixJobMonitor` to `false` in the shared pipeline
variables
- explicitly enable it in `eng/pipelines/runtime.yml`
- preserve the standalone monitor job and fire-and-forget submissions
only for the runtime pipeline
## Motivation
The original rollout in dotnet#129690 intended to enable the Helix Job Monitor
only for the runtime pipeline. However, the switch was set to `true` in
the shared variables template imported by other pipelines.
This caused standalone pipelines such as [`runtime-coreclr
superpmi-collect` build
3043381](https://dev.azure.com/dnceng/internal/_build/results?buildId=3043381&view=results)
to configure Helix submissions for out-of-band monitoring without adding
a monitor job. Those submissions returned after submission rather than
waiting for completion.
Defaulting the shared switch off and opting in from `runtime.yml` keeps
the complete feature scoped to its intended pipeline.
## Validation
- `git diff --check`
- verified `enableHelixJobMonitor` is enabled only by
`eng/pipelines/runtime.yml`
> [!NOTE]
> This pull request description was generated with GitHub Copilot.
Copilot-Session: 0c07f370-3ea0-4352-8610-0ab0cf1f7b0a
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants

@premun@mmitche@akoeplinger@jkoritzinsky