diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json
index 9676702f28387f..14f5de40c542fb 100644
--- a/.config/dotnet-tools.json
+++ b/.config/dotnet-tools.json
@@ -25,6 +25,12 @@
"commands": [
"slngen"
]
+ },
+ "microsoft.dotnet.helix.jobmonitor": {
+ "version": "11.0.0-beta.26270.2",
+ "commands": [
+ "dotnet-helix-job-monitor"
+ ]
}
}
}
diff --git a/NuGet.config b/NuGet.config
index 8d2d351914d014..6a926020b7209e 100644
--- a/NuGet.config
+++ b/NuGet.config
@@ -22,6 +22,8 @@
+
+
diff --git a/eng/Version.Details.props b/eng/Version.Details.props
index 1ac54b4b87266a..c7368865bf4adf 100644
--- a/eng/Version.Details.props
+++ b/eng/Version.Details.props
@@ -114,6 +114,26 @@ This file should be imported by eng/Versions.props
11.0.0-prerelease.26204.1
11.0.0-prerelease.26204.1
11.0.0-prerelease.26204.1
+
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 11.0.0-beta.26265.3
+ 2.9.3-beta.26264.2
+ 11.0.0-beta.26265.3
@@ -157,6 +177,26 @@ This file should be imported by eng/Versions.props
$(SystemReflectionMetadataPackageVersion)
$(SystemReflectionMetadataLoadContextPackageVersion)
$(SystemTextJsonPackageVersion)
+
+ $(MicrosoftDotNetArcadeSdkPackageVersion)
+ $(MicrosoftDotNetBuildTasksArchivesPackageVersion)
+ $(MicrosoftDotNetBuildTasksFeedPackageVersion)
+ $(MicrosoftDotNetBuildTasksInstallersPackageVersion)
+ $(MicrosoftDotNetBuildTasksPackagingPackageVersion)
+ $(MicrosoftDotNetBuildTasksTargetFrameworkPackageVersion)
+ $(MicrosoftDotNetBuildTasksTemplatingPackageVersion)
+ $(MicrosoftDotNetBuildTasksWorkloadsPackageVersion)
+ $(MicrosoftDotNetCodeAnalysisPackageVersion)
+ $(MicrosoftDotNetGenAPIPackageVersion)
+ $(MicrosoftDotNetGenFacadesPackageVersion)
+ $(MicrosoftDotNetHelixJobMonitorPackageVersion)
+ $(MicrosoftDotNetHelixSdkPackageVersion)
+ $(MicrosoftDotNetPackageTestingPackageVersion)
+ $(MicrosoftDotNetRemoteExecutorPackageVersion)
+ $(MicrosoftDotNetSharedFrameworkSdkPackageVersion)
+ $(MicrosoftDotNetXliffTasksPackageVersion)
+ $(MicrosoftDotNetXUnitConsoleRunnerPackageVersion)
+ $(MicrosoftDotNetXUnitExtensionsPackageVersion)
$(MicrosoftNETCoreRuntimeICUTransportPackageVersion)
diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index b5cd18bf6595e4..44352b8acf68d3 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -51,77 +51,77 @@
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
https://github.com/dotnet/dotnet
0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
https://github.com/dotnet/runtime-assets
@@ -299,9 +299,9 @@
https://github.com/dotnet/xharness
0668c80ec27851f3c7f1b3e4536110a1d39af587
-
- https://github.com/dotnet/dotnet
- 0eae08ed2f094f44e0151e4815e7cdd1a334fcdf
+
+ https://github.com/dotnet/arcade
+ 674b66fb89fae22b8823c85c73e7b79a2346f8c5
https://dev.azure.com/dnceng/internal/_git/dotnet-optimization
@@ -417,5 +417,9 @@
https://github.com/dotnet/runtime-assets
6af4bc0beb5fd7bc49a4a986a04ff6f6e4b83ab1
+
+ https://github.com/dotnet/arcade
+ 4f3ff9cd2ae04b357d169bcadee91d8c07f86bfe
+
diff --git a/eng/common/AGENTS.md b/eng/common/AGENTS.md
new file mode 100644
index 00000000000000..a5ed8f72926d3d
--- /dev/null
+++ b/eng/common/AGENTS.md
@@ -0,0 +1,5 @@
+# `eng/common`
+
+Files under `eng/common` come from [Arcade](https://github.com/dotnet/arcade).
+Edits in `eng/common` will be overwritten by automation unless the changes are made directly in the Arcade repository.
+For more information, see the [Arcade documentation](https://github.com/dotnet/arcade/tree/main/Documentation).
diff --git a/eng/common/core-templates/job/helix-job-monitor.yml b/eng/common/core-templates/job/helix-job-monitor.yml
new file mode 100644
index 00000000000000..0974dbbe6e9ff7
--- /dev/null
+++ b/eng/common/core-templates/job/helix-job-monitor.yml
@@ -0,0 +1,224 @@
+parameters:
+# Maximum run time of the monitor job in minutes. Also used for --max-wait-minutes.
+- name: timeoutInMinutes
+ type: number
+ default: 360
+
+# Owner segment of the source repository (e.g. 'dotnet' for 'dotnet/runtime') passed via --organization.
+# Defaults to the owner segment of BUILD_REPOSITORY_NAME when empty.
+- name: organization
+ type: string
+ default: ''
+
+# Name of the source repository (e.g. 'runtime' for 'dotnet/runtime') passed via --repository.
+# Defaults to the repo segment of BUILD_REPOSITORY_NAME when empty.
+- name: repository
+ type: string
+ default: ''
+
+# Optional dependency list for the generated job.
+- name: dependsOn
+ type: object
+ default: []
+
+# Optional condition for the generated job.
+- name: condition
+ type: string
+ default: ''
+
+# NuGet package id of the Helix job monitor tool.
+- name: toolPackageId
+ type: string
+ default: Microsoft.DotNet.Helix.JobMonitor
+
+# Console command exposed by the installed tool package.
+- name: toolCommand
+ type: string
+ default: dotnet-helix-job-monitor
+
+# Optional explicit tool version. Only honored when 'toolNupkgArtifactName' is set; in the
+# default code path the version is taken from the consuming repo's .config/dotnet-tools.json.
+- name: toolVersion
+ type: string
+ default: ''
+
+# Optional NuGet feed used as an additional source when installing the tool. Only honored
+# when 'toolNupkgArtifactName' is set; in the default code path the tool is restored from
+# the consuming repo's .config/dotnet-tools.json manifest and no extra feeds are consulted.
+- name: toolSource
+ type: string
+ default: ''
+
+# Base URI for the Helix service (--helix-base-uri).
+- name: helixBaseUri
+ type: string
+ default: https://helix.dot.net/
+
+# Helix API access token forwarded to the tool via the HELIX_ACCESSTOKEN environment variable.
+- name: helixAccessToken
+ type: string
+ default: ''
+
+# Polling interval in seconds (--polling-interval-seconds).
+- name: pollingIntervalSeconds
+ type: number
+ default: 30
+
+# Advanced: optional pipeline artifact (produced earlier in this run) that contains the tool
+# nupkg. When set, the artifact is downloaded and the tool is installed from the nupkg into
+# a local tool-path; this bypasses the repo's .config/dotnet-tools.json manifest and is
+# primarily intended for the Arcade repository itself, where the Helix job monitor tool is
+# built in the same pipeline that runs this template.
+#
+# When this parameter is empty (the default), the consuming repository must declare the tool
+# in its .config/dotnet-tools.json manifest (alongside other local .NET tools); the template
+# will check out the repo and run 'dotnet tool restore' to install the version pinned there.
+- name: toolNupkgArtifactName
+ type: string
+ default: ''
+
+# Advanced: sub-path within the downloaded artifact where the tool nupkg is located. Defaults
+# to the standard Arcade non-shipping packages location for a Release build (relative to the
+# pipeline artifact root, which is itself the build's 'artifacts' directory).
+- name: toolNupkgArtifactSubPath
+ type: string
+ default: 'packages/Release/NonShipping'
+
+jobs:
+- job: HelixJobMonitor
+ displayName: Monitor Helix Jobs
+ timeoutInMinutes: ${{ parameters.timeoutInMinutes }}
+ ${{ if ne(length(parameters.dependsOn), 0) }}:
+ dependsOn: ${{ parameters.dependsOn }}
+ ${{ if ne(parameters.condition, '') }}:
+ condition: ${{ parameters.condition }}
+ pool:
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ name: $(DncEngPublicBuildPool)
+ demands: ImageOverride -equals build.azurelinux.3.amd64.open
+ ${{ else }}:
+ name: $(DncEngInternalBuildPool)
+ demands: ImageOverride -equals build.azurelinux.3.amd64
+ steps:
+ - checkout: self
+ fetchDepth: 1
+
+ - ${{ if ne(parameters.toolNupkgArtifactName, '') }}:
+ - task: DownloadPipelineArtifact@2
+ displayName: Download Helix Job Monitor artifact
+ inputs:
+ buildType: current
+ artifactName: ${{ parameters.toolNupkgArtifactName }}
+ itemPattern: '${{ parameters.toolNupkgArtifactSubPath }}/${{ parameters.toolPackageId }}.*.nupkg'
+ targetPath: $(Agent.TempDirectory)/helix-job-monitor-nupkg
+
+ - bash: |
+ set -euo pipefail
+
+ toolPath="$AGENT_TEMPDIRECTORY/helix-job-monitor-tool"
+ mkdir -p "$toolPath"
+
+ packageId='${{ parameters.toolPackageId }}'
+ toolVersion='${{ parameters.toolVersion }}'
+ nupkgArtifactSubPath='${{ parameters.toolNupkgArtifactSubPath }}'
+ nupkgDir="$AGENT_TEMPDIRECTORY/helix-job-monitor-nupkg/$nupkgArtifactSubPath"
+
+ if [ ! -d "$nupkgDir" ]; then
+ echo "Expected nupkg directory '$nupkgDir' was not produced by the artifact download." >&2
+ exit 1
+ fi
+
+ nupkg=$(find "$nupkgDir" -maxdepth 1 -type f -name "$packageId.*.nupkg" | head -n 1)
+ if [ -z "$nupkg" ]; then
+ echo "No '$packageId.*.nupkg' found in '$nupkgDir'." >&2
+ exit 1
+ fi
+
+ # Derive the version from the nupkg filename so the local package is selected
+ # deterministically instead of resolving against any other configured feed.
+ nupkgBase=$(basename "$nupkg" .nupkg)
+ derivedVersion="${nupkgBase#${packageId}.}"
+ if [ -z "$toolVersion" ]; then
+ toolVersion="$derivedVersion"
+ fi
+
+ echo "Using locally built '$packageId' version '$toolVersion' from '$nupkgDir'."
+
+ # Create a minimal NuGet.config that only references the local nupkg directory.
+ # This avoids conflicts with the repo's package source mapping which blocks --add-source.
+ toolNugetConfig="$AGENT_TEMPDIRECTORY/helix-job-monitor-nuget.config"
+ printf '\n\n \n \n \n \n\n' "$nupkgDir" > "$toolNugetConfig"
+
+ pushd "$(Build.SourcesDirectory)" > /dev/null
+ ./eng/common/dotnet.sh tool install \
+ --tool-path "$toolPath" "$packageId" \
+ --version "$toolVersion" \
+ --configfile "$toolNugetConfig"
+
+ # Locate the tool DLL so the run step can invoke it via ./eng/common/dotnet.sh exec.
+ toolDll=$(find "$toolPath/.store" -path '*/tools/*/any/*.deps.json' -type f | head -n 1)
+ toolDll="${toolDll%.deps.json}.dll"
+ if [ ! -f "$toolDll" ]; then
+ echo "Could not find tool DLL in '$toolPath/.store'." >&2
+ exit 1
+ fi
+
+ echo "Tool DLL: $toolDll"
+ echo "##vso[task.setvariable variable=HelixJobMonitorDll]$toolDll"
+ displayName: Install Helix Job Monitor
+
+ - ${{ else }}:
+ - bash: ./eng/common/dotnet.sh tool restore
+ displayName: Restore Helix Job Monitor
+
+ - bash: |
+ set -euo pipefail
+
+ toolArgs=(
+ --helix-base-uri '${{ parameters.helixBaseUri }}'
+ --polling-interval-seconds '${{ parameters.pollingIntervalSeconds }}'
+ --max-wait-minutes "$((${{ parameters.timeoutInMinutes }} - 2))" # Set the tool's timeout slightly lower than the Azure DevOps job timeout to allow it to exit gracefully.
+ --stage-name '$(System.StageName)'
+ )
+
+ organization='${{ parameters.organization }}'
+ repository='${{ parameters.repository }}'
+
+ # Fall back to Azure DevOps-provided environment variables when the caller did not
+ # supply organization / repository explicitly. BUILD_REPOSITORY_NAME is typically
+ # 'owner/repo' for GitHub-backed builds.
+ if [ -z "$organization" ] || [ -z "$repository" ]; then
+ buildRepoName="${BUILD_REPOSITORY_NAME:-}"
+ if [ -n "$buildRepoName" ] && [[ "$buildRepoName" == */* ]]; then
+ repoOwner="${buildRepoName%%/*}"
+ repoName="${buildRepoName#*/}"
+ if [ -z "$organization" ]; then organization="$repoOwner"; fi
+ if [ -z "$repository" ]; then repository="$repoName"; fi
+ fi
+ fi
+
+ if [ -n "$organization" ]; then toolArgs+=( --organization "$organization" ); fi
+ if [ -n "$repository" ]; then toolArgs+=( --repository "$repository" ); fi
+
+ # Build.Reason and Build.SourceBranch are required to derive the Helix source filter
+ # the same way the Helix SDK submitter does (PR -> 'pr', internal -> 'official',
+ # otherwise -> 'ci'). Without these, manually-queued / scheduled / CI builds would
+ # be looked up under the wrong source prefix and find zero jobs.
+ toolArgs+=( --build-reason "$(Build.Reason)" )
+ toolArgs+=( --source-branch "$(Build.SourceBranch)" )
+
+ if [ -n '${{ parameters.toolNupkgArtifactName }}' ]; then
+ # Tool was installed from a local nupkg; run the DLL via the repo-local dotnet.
+ export DOTNET_ROOT="$(Build.SourcesDirectory)/.dotnet"
+ ./eng/common/dotnet.sh exec "$(HelixJobMonitorDll)" "${toolArgs[@]}"
+ else
+ # Tool was restored from the local .config/dotnet-tools.json manifest; invoke it
+ # through the manifest from the repo root.
+ pushd "$BUILD_SOURCESDIRECTORY" > /dev/null
+ trap 'popd > /dev/null' EXIT
+ ./eng/common/dotnet.sh tool run '${{ parameters.toolCommand }}' -- "${toolArgs[@]}"
+ fi
+ displayName: Monitor Helix Jobs
+ env:
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken)
+ HELIX_ACCESSTOKEN: ${{ parameters.helixAccessToken }}
diff --git a/eng/pipelines/common/templates/browser-wasm-build-tests.yml b/eng/pipelines/common/templates/browser-wasm-build-tests.yml
index 39fca50137411f..1a148ac8fc0c2d 100644
--- a/eng/pipelines/common/templates/browser-wasm-build-tests.yml
+++ b/eng/pipelines/common/templates/browser-wasm-build-tests.yml
@@ -7,6 +7,7 @@ parameters:
platforms: []
shouldContinueOnError: false
extraBuildArgs: ''
+ useHelixMonitor: false
jobs:
@@ -128,3 +129,4 @@ jobs:
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
diff --git a/eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml b/eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml
index ac76b6332c3801..b25d3069528d73 100644
--- a/eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml
+++ b/eng/pipelines/common/templates/browser-wasm-coreclr-build-tests.yml
@@ -141,3 +141,4 @@ jobs:
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
+ useHelixMonitor: true
diff --git a/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml b/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml
index f88692190cc221..7f22df6c95545d 100644
--- a/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml
+++ b/eng/pipelines/common/templates/runtimes/build-runtime-tests-and-send-to-helix.yml
@@ -13,6 +13,7 @@ parameters:
nativeAotTest: false
runtimeFlavor: 'mono'
runtimeVariant: 'monointerpreter'
+ useHelixMonitor: false
llvmAotStepContainer: ''
scenarios:
- normal
@@ -105,6 +106,7 @@ steps:
helixSource: $(_HelixSource)
${{ if ne(parameters.readyToRun, true) }}:
helixType: 'test/functional/cli/'
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
helixQueues: ${{ parameters.helixQueues }}
# This tests whether an array is empty
diff --git a/eng/pipelines/common/templates/runtimes/run-test-job.yml b/eng/pipelines/common/templates/runtimes/run-test-job.yml
index 34351420b99805..969fcd15aa83dc 100644
--- a/eng/pipelines/common/templates/runtimes/run-test-job.yml
+++ b/eng/pipelines/common/templates/runtimes/run-test-job.yml
@@ -30,6 +30,7 @@ parameters:
unifiedBuildNameSuffix: ''
unifiedBuildConfigOverride: ''
extraBuildArgs: ''
+ useHelixMonitor: false
### Test run job
@@ -290,6 +291,7 @@ jobs:
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
runtimeVariant: ${{ parameters.runtimeVariant }}
SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
${{ if eq(variables['System.TeamProject'], 'public') }}:
creator: $(Build.DefinitionName)
diff --git a/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml b/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
index 9e66956a3c2547..e959eba200b4cf 100644
--- a/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
+++ b/eng/pipelines/common/templates/runtimes/send-to-helix-step.yml
@@ -12,6 +12,7 @@ parameters:
helixSource: ''
helixQueues: ''
helixType: ''
+ useHelixMonitor: false
msbuildParallelism: '/maxcpucount'
scenarios: ''
timeoutPerTestCollectionInMinutes: ''
@@ -42,7 +43,16 @@ steps:
- template: send-to-helix-inner-step.yml
parameters:
osGroup: ${{ parameters.osGroup }}
- sendParams: ${{ parameters.helixProjectArguments }} ${{ parameters.msbuildParallelism }} /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog /p:TargetArchitecture=${{ parameters.archType }} /p:TargetOS=${{ parameters.osGroup }} /p:TargetOSSubgroup=${{ parameters.osSubgroup }} /p:Configuration=${{ parameters.buildConfig }} ${{ parameters.extraHelixArguments }}
+ sendParams: >
+ ${{ parameters.helixProjectArguments }}
+ ${{ parameters.msbuildParallelism }}
+ /bl:$(Build.SourcesDirectory)/artifacts/log/SendToHelix.binlog
+ /p:TargetArchitecture=${{ parameters.archType }}
+ /p:TargetOS=${{ parameters.osGroup }}
+ /p:TargetOSSubgroup=${{ parameters.osSubgroup }}
+ /p:Configuration=${{ parameters.buildConfig }}
+ /p:EnableHelixJobMonitor=${{ parameters.useHelixMonitor }}
+ ${{ parameters.extraHelixArguments }}
condition: and(succeeded(), ${{ parameters.condition }})
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
displayName: ${{ parameters.displayName }}
diff --git a/eng/pipelines/common/templates/simple-wasm-build-tests.yml b/eng/pipelines/common/templates/simple-wasm-build-tests.yml
index ec0678f6463e4b..459f5e74635e47 100644
--- a/eng/pipelines/common/templates/simple-wasm-build-tests.yml
+++ b/eng/pipelines/common/templates/simple-wasm-build-tests.yml
@@ -6,6 +6,7 @@ parameters:
platforms: []
shouldContinueOnError: false
extraBuildArgs: ''
+ useHelixMonitor: false
jobs:
@@ -50,4 +51,5 @@ jobs:
extraHelixArguments: /p:BrowserHost=$(_hostedOs)
scenarios:
- buildwasmapps
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
diff --git a/eng/pipelines/common/templates/wasm-coreclr-library-tests.yml b/eng/pipelines/common/templates/wasm-coreclr-library-tests.yml
index bf8e7eccb9c91d..61bb488f777113 100644
--- a/eng/pipelines/common/templates/wasm-coreclr-library-tests.yml
+++ b/eng/pipelines/common/templates/wasm-coreclr-library-tests.yml
@@ -9,6 +9,7 @@ parameters:
scenarios: ['WasmTestOnChrome']
shouldContinueOnError: false
shouldRunSmokeOnly: false
+ useHelixMonitor: false
jobs:
@@ -100,3 +101,4 @@ jobs:
testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)
extraHelixArguments: /p:BrowserHost=$(_hostedOs) $(_wasmRunSmokeTestsOnlyArg) ${{ parameters.extraHelixArguments }}
scenarios: ${{ parameters.scenarios }}
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
diff --git a/eng/pipelines/common/templates/wasm-library-aot-tests.yml b/eng/pipelines/common/templates/wasm-library-aot-tests.yml
index d3dbf8d8db6524..87679ac6d3f22a 100644
--- a/eng/pipelines/common/templates/wasm-library-aot-tests.yml
+++ b/eng/pipelines/common/templates/wasm-library-aot-tests.yml
@@ -11,6 +11,7 @@ parameters:
shouldRunSmokeOnly: false
shouldContinueOnError: false
scenarios: []
+ useHelixMonitor: false
jobs:
@@ -31,6 +32,7 @@ jobs:
alwaysRun: ${{ parameters.alwaysRun }}
shouldRunSmokeOnly: ${{ parameters.shouldRunSmokeOnly }}
shouldContinueOnError: ${{ parameters.shouldContinueOnError }}
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
scenarios:
- ${{ if ne(parameters.scenarios[0], '') }}:
- ${{ parameters.scenarios }}
diff --git a/eng/pipelines/common/templates/wasm-library-tests.yml b/eng/pipelines/common/templates/wasm-library-tests.yml
index 149215ea501937..b21c9c6a153fce 100644
--- a/eng/pipelines/common/templates/wasm-library-tests.yml
+++ b/eng/pipelines/common/templates/wasm-library-tests.yml
@@ -9,6 +9,7 @@ parameters:
scenarios: ['WasmTestOnChrome']
shouldContinueOnError: false
shouldRunSmokeOnly: false
+ useHelixMonitor: false
jobs:
@@ -99,3 +100,4 @@ jobs:
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
extraHelixArguments: /p:BrowserHost=$(_hostedOs) $(_wasmRunSmokeTestsOnlyArg) ${{ parameters.extraHelixArguments }}
scenarios: ${{ parameters.scenarios }}
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
diff --git a/eng/pipelines/common/templates/wasm-runtime-tests.yml b/eng/pipelines/common/templates/wasm-runtime-tests.yml
index 8f84bdb93038db..c1e1f4cf7d93f5 100644
--- a/eng/pipelines/common/templates/wasm-runtime-tests.yml
+++ b/eng/pipelines/common/templates/wasm-runtime-tests.yml
@@ -4,6 +4,7 @@ parameters:
isWasmOnlyBuild: false
platforms: []
extraBuildArgs: ''
+ useHelixMonitor: false
jobs:
@@ -48,5 +49,6 @@ jobs:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
testBuildArgs: /p:InstallV8ForTests=false
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
diff --git a/eng/pipelines/libraries/helix.yml b/eng/pipelines/libraries/helix.yml
index 03b3cf1ebaffca..ab8f1f02c6e324 100644
--- a/eng/pipelines/libraries/helix.yml
+++ b/eng/pipelines/libraries/helix.yml
@@ -12,39 +12,41 @@ parameters:
condition: always()
extraHelixArguments: ''
shouldContinueOnError: false
+ useHelixMonitor: false
scenarios: ''
SuperPmiCollect: ''
SuperPmiCollectionType: ''
SuperPmiCollectionName: ''
steps:
- - script: $(_msbuildCommand) $(_warnAsErrorParamHelixOverride) -restore
- $(Build.SourcesDirectory)/src/libraries/sendtohelix.proj
- /p:RuntimeFlavor=${{ parameters.runtimeFlavor }}
- /p:TargetArchitecture=${{ parameters.archType }}
- /p:TargetRuntimeIdentifier=${{ parameters.targetRid }}
- /p:Configuration=${{ parameters.buildConfig }}
- /p:TargetOS=${{ parameters.osGroup }}
- /p:MonoForceInterpreter=${{ parameters.interpreter }}
- /p:TestScope=${{ parameters.testScope }}
- /p:TestRunNamePrefixSuffix=${{ parameters.testRunNamePrefixSuffix }}
- /p:HelixBuild=$(Build.BuildNumber)
- ${{ parameters.extraHelixArguments }}
- /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
- displayName: Send to Helix
- condition: and(succeeded(), ${{ parameters.condition }})
- continueOnError: ${{ eq(parameters.shouldContinueOnError, true) }}
- env:
- SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
- _Scenarios: ${{ join(',', parameters.scenarios) }} # Pass scenarios to MSBuild as env var to avoid need of escaping comma separated list
- _SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
- _SuperPmiCollectionType: ${{ parameters.SuperPmiCollectionType }}
- _SuperPmiCollectionName: ${{ parameters.SuperPmiCollectionName }}
+- script: $(_msbuildCommand) $(_warnAsErrorParamHelixOverride) -restore
+ $(Build.SourcesDirectory)/src/libraries/sendtohelix.proj
+ /p:RuntimeFlavor=${{ parameters.runtimeFlavor }}
+ /p:TargetArchitecture=${{ parameters.archType }}
+ /p:TargetRuntimeIdentifier=${{ parameters.targetRid }}
+ /p:Configuration=${{ parameters.buildConfig }}
+ /p:TargetOS=${{ parameters.osGroup }}
+ /p:MonoForceInterpreter=${{ parameters.interpreter }}
+ /p:TestScope=${{ parameters.testScope }}
+ /p:TestRunNamePrefixSuffix=${{ parameters.testRunNamePrefixSuffix }}
+ /p:HelixBuild=$(Build.BuildNumber)
+ /p:EnableHelixJobMonitor=${{ parameters.useHelixMonitor }}
+ ${{ parameters.extraHelixArguments }}
+ /bl:$(Build.SourcesDirectory)/artifacts/log/$(_BuildConfig)/SendToHelix.binlog
+ displayName: Send to Helix
+ condition: and(succeeded(), ${{ parameters.condition }})
+ continueOnError: ${{ eq(parameters.shouldContinueOnError, true) }}
+ env:
+ SYSTEM_ACCESSTOKEN: $(System.AccessToken) # We need to set this env var to publish helix results to Azure Dev Ops
+ _Scenarios: ${{ join(',', parameters.scenarios) }} # Pass scenarios to MSBuild as env var to avoid need of escaping comma separated list
+ _SuperPmiCollect: ${{ parameters.SuperPmiCollect }}
+ _SuperPmiCollectionType: ${{ parameters.SuperPmiCollectionType }}
+ _SuperPmiCollectionName: ${{ parameters.SuperPmiCollectionName }}
- ${{ if eq(variables['System.TeamProject'], 'internal') }}:
- HelixAccessToken: $(HelixApiAccessToken)
- HelixTargetQueues: ${{ replace(lower(join('+', parameters.helixQueues)), '.open', '') }}
- Creator: ''
- ${{ if eq(variables['System.TeamProject'], 'public') }}:
- HelixTargetQueues: ${{ join('+', parameters.helixQueues) }}
- Creator: ${{ parameters.creator }}
+ ${{ if eq(variables['System.TeamProject'], 'internal') }}:
+ HelixAccessToken: $(HelixApiAccessToken)
+ HelixTargetQueues: ${{ replace(lower(join('+', parameters.helixQueues)), '.open', '') }}
+ Creator: ''
+ ${{ if eq(variables['System.TeamProject'], 'public') }}:
+ HelixTargetQueues: ${{ join('+', parameters.helixQueues) }}
+ Creator: ${{ parameters.creator }}
diff --git a/eng/pipelines/libraries/run-test-job.yml b/eng/pipelines/libraries/run-test-job.yml
index 75f35341da2d97..c766b35f3d0b2d 100644
--- a/eng/pipelines/libraries/run-test-job.yml
+++ b/eng/pipelines/libraries/run-test-job.yml
@@ -27,6 +27,7 @@ parameters:
unifiedBuildNameSuffix: ''
unifiedBuildConfigOverride: ''
templatePath: 'templates'
+ useHelixMonitor: false
jobs:
- template: /eng/common/${{ parameters.templatePath }}/job/job.yml
@@ -134,6 +135,8 @@ jobs:
${{ if ne(parameters.scenarios[0], '') }}:
scenarios: ${{ parameters.scenarios }}
+ useHelixMonitor: ${{ parameters.useHelixMonitor }}
+
- ${{ if eq(parameters.SuperPmiCollect, true) }}:
- template: /eng/pipelines/libraries/superpmi-postprocess-step.yml
parameters:
diff --git a/eng/pipelines/runtime.yml b/eng/pipelines/runtime.yml
index 6c3951315d1fcb..02444690dd31c1 100644
--- a/eng/pipelines/runtime.yml
+++ b/eng/pipelines/runtime.yml
@@ -67,6 +67,11 @@ extends:
- stage: Build
jobs:
+ - template: /eng/common/core-templates/job/helix-job-monitor.yml
+ parameters:
+ helixAccessToken: $(HelixApiAccessToken)
+ timeoutInMinutes: 540
+
#
# Build CoreCLR verticals where we don't run host tests
#
@@ -803,6 +808,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: NativeAOT_$(_BuildConfig)
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
@@ -952,6 +958,7 @@ extends:
scenarios:
- WasmTestOnChrome
- WasmTestOnFirefox
+ useHelixMonitor: true
- template: /eng/pipelines/common/templates/wasm-library-tests.yml
parameters:
@@ -961,6 +968,7 @@ extends:
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
scenarios:
- WasmTestOnChrome
+ useHelixMonitor: true
# WebAssembly CoreCLR
- template: /eng/pipelines/common/templates/wasm-coreclr-library-tests.yml
@@ -971,6 +979,7 @@ extends:
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
scenarios:
- WasmTestOnChrome
+ useHelixMonitor: true
# WebAssembly CoreCLR - smoke tests only on Firefox and V8
- template: /eng/pipelines/common/templates/wasm-coreclr-library-tests.yml
@@ -984,6 +993,7 @@ extends:
scenarios:
- WasmTestOnFirefox
- WasmTestOnV8
+ useHelixMonitor: true
# EAT Library tests - only run on linux
- template: /eng/pipelines/common/templates/wasm-library-aot-tests.yml
@@ -996,6 +1006,7 @@ extends:
shouldRunSmokeOnly: false
alwaysRun: ${{ variables.isRollingBuild }}
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS) /maxcpucount:2
+ useHelixMonitor: true
# AOT Library tests
- template: /eng/pipelines/common/templates/wasm-library-aot-tests.yml
@@ -1009,6 +1020,7 @@ extends:
shouldRunSmokeOnly: true
alwaysRun: ${{ variables.isRollingBuild }}
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
+ useHelixMonitor: true
# For Wasm.Build.Tests - runtime pack builds
- template: /eng/pipelines/common/templates/wasm-build-only.yml
@@ -1041,6 +1053,7 @@ extends:
- browser_wasm_win
alwaysRun: ${{ variables.isRollingBuild }}
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
+ useHelixMonitor: true
# Wasm runtime tests
- template: /eng/pipelines/common/templates/wasm-runtime-tests.yml
@@ -1049,6 +1062,7 @@ extends:
- browser_wasm
alwaysRun: ${{ variables.isRollingBuild }}
extraBuildArgs: /p:AotHostArchitecture=x64 /p:AotHostOS=$(_hostedOS)
+ useHelixMonitor: true
# WASI/WASM
@@ -1099,6 +1113,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ useHelixMonitor: true
condition: >-
or(
eq(variables['librariesContainsChange'], true),
@@ -1142,6 +1157,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)
+ useHelixMonitor: true
condition: >-
or(
eq(variables['librariesContainsChange'], true),
@@ -1186,6 +1202,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:NeedsToBuildAppsOnHelix=true
condition: >-
or(
@@ -1230,6 +1247,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: NativeAOT_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:NeedsToBuildAppsOnHelix=true
condition: >-
or(
@@ -1274,6 +1292,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:NeedsToBuildAppsOnHelix=true
condition: >-
or(
@@ -1317,6 +1336,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_$(_BuildConfig)
+ useHelixMonitor: true
condition: >-
or(
eq(variables['librariesContainsChange'], true),
@@ -1359,6 +1379,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: NativeAOT_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:NeedsToBuildAppsOnHelix=true
condition: >-
or(
@@ -1401,6 +1422,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: CoreCLR_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:NeedsToBuildAppsOnHelix=true
condition: >-
or(
@@ -1524,6 +1546,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: NET481_$(_BuildConfig)
+ useHelixMonitor: true
extraHelixArguments: /p:BuildTargetFramework=net481
condition: >-
or(
@@ -1682,6 +1705,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_Release
+ useHelixMonitor: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
@@ -1718,6 +1742,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_Release
+ useHelixMonitor: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
parameters:
@@ -1756,6 +1781,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_Release
+ useHelixMonitor: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
#
@@ -1795,6 +1821,7 @@ extends:
creator: dotnet-bot
llvmAotStepContainer: linux_x64_llvmaot
testRunNamePrefixSuffix: Mono_Release
+ useHelixMonitor: true
extraVariablesTemplates:
- template: /eng/pipelines/common/templates/runtimes/test-variables.yml
@@ -1835,6 +1862,7 @@ extends:
liveLibrariesBuildConfig: Release
unifiedArtifactsName: CoreCLR_ReleaseLibraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: CoreCLR_ReleaseLibraries
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
@@ -1854,6 +1882,7 @@ extends:
liveLibrariesBuildConfig: Release
unifiedArtifactsName: CoreCLR_ReleaseLibraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: CoreCLR_ReleaseLibraries
+ useHelixMonitor: true
extraBuildArgs: -os browser -p:HostConfiguration=Release
condition: >-
or(
@@ -1879,6 +1908,7 @@ extends:
unifiedArtifactsName: Libraries_CheckedCoreCLR_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)
unifiedBuildNameSuffix: Libraries_CheckedCoreCLR
unifiedBuildConfigOverride: ${{ variables.debugOnPrReleaseOnRolling }}
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
@@ -1903,6 +1933,7 @@ extends:
unifiedArtifactsName: CoreCLR_Libraries_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
helixArtifactsName: CoreCLR_Libraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: CoreCLR_Libraries
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
@@ -1930,6 +1961,7 @@ extends:
helixArtifactsName: CoreCLR_Libraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(debugOnPrReleaseOnRolling)
unifiedBuildNameSuffix: CoreCLR_Libraries
unifiedBuildConfigOverride: ${{ variables.debugOnPrReleaseOnRolling }}
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
@@ -1969,6 +2001,7 @@ extends:
unifiedArtifactsName: Libraries_CheckedCoreCLR_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
helixArtifactsName: Libraries_CheckedCoreCLR_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: Libraries_CheckedCoreCLR
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
@@ -1996,6 +2029,7 @@ extends:
helixArtifactsName: CoreCLR_ReleaseLibraries_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_Checked
unifiedBuildNameSuffix: CoreCLR_ReleaseLibraries
unifiedBuildConfigOverride: checked
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
@@ -2015,6 +2049,7 @@ extends:
unifiedArtifactsName: Libraries_CheckedCoreCLR_BuildArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
helixArtifactsName: Libraries_CheckedCoreCLR_TestArtifacts_$(osGroup)$(osSubgroup)_$(archType)_$(_BuildConfig)
unifiedBuildNameSuffix: Libraries_CheckedCoreCLR
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_coreclr.containsChange'], true),
@@ -2046,6 +2081,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_Interpreter_$(_BuildConfig)
+ useHelixMonitor: true
interpreter: true
condition: >-
or(
@@ -2078,6 +2114,7 @@ extends:
parameters:
creator: dotnet-bot
testRunNamePrefixSuffix: Mono_Minijit_$(_BuildConfig)
+ useHelixMonitor: true
condition: >-
or(
eq(stageDependencies.EvaluatePaths.evaluate_paths.outputs['SetPathVars_libraries.containsChange'], true),
diff --git a/global.json b/global.json
index 01f9d078a1fb65..a5771df8a7075d 100644
--- a/global.json
+++ b/global.json
@@ -13,9 +13,9 @@
"dotnet": "11.0.100-preview.5.26227.104"
},
"msbuild-sdks": {
- "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26257.113",
- "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26257.113",
- "Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26257.113",
+ "Microsoft.DotNet.Arcade.Sdk": "11.0.0-beta.26265.3",
+ "Microsoft.DotNet.Helix.Sdk": "11.0.0-beta.26265.3",
+ "Microsoft.DotNet.SharedFramework.Sdk": "11.0.0-beta.26265.3",
"Microsoft.Build.NoTargets": "3.7.0",
"Microsoft.Build.Traversal": "3.4.0",
"Microsoft.NET.Sdk.IL": "11.0.0-preview.5.26257.113"