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"