diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json new file mode 100644 index 00000000000..5f56247a879 --- /dev/null +++ b/.config/dotnet-tools.json @@ -0,0 +1,12 @@ +{ + "version": 1, + "isRoot": true, + "tools": { + "microsoft.dotnet.helix.jobmonitor": { + "version": "11.0.0-beta.26458.103", + "commands": [ + "dotnet-helix-job-monitor" + ] + } + } +} diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4cd188a6a74..9a4cdcf2bac 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,6 +12,18 @@ parameters: type: boolean default: false +variables: + # This entrypoint has one implicit stage. Keep asynchronous sends paired with its monitor. + - name: EnableHelixJobMonitor + value: true + # Matrix legs share a phase and queue. Keep their monitor identities distinct across channels. + - name: TestRunNamePrefix + value: '$(Agent.JobName)_' + - template: /eng/common/templates/variables/pool-providers.yml + - ${{ if eq(variables['System.TeamProject'], 'internal') }}: + # The standalone monitor does not inherit the submitter jobs' variable groups. + - group: DotNet-HelixApi-Access + resources: containers: - container: ubuntu_x64_build_container @@ -67,3 +79,9 @@ jobs: jobParameters: ${{ if parameters.onlySanityCheck }}: onlySanityCheck: true + + - template: /eng/common/core-templates/job/helix-job-monitor.yml + parameters: + timeoutInMinutes: 360 + helixAccessToken: $(HelixApiAccessToken) + allowNoHelixJobs: false diff --git a/docs/sdk-scenarios.md b/docs/sdk-scenarios.md index 12e2c952289..c09f165f198 100644 --- a/docs/sdk-scenarios.md +++ b/docs/sdk-scenarios.md @@ -4,6 +4,49 @@ An introduction of how to run scenario tests can be found in [Scenarios Tests Gu - [SDK Build Throughput Scenario](#sdk-build-throughput-scenario) +## SDK performance pipeline + +The repository's [azure-pipelines.yml](../azure-pipelines.yml) entrypoint uses +[sdk-perf-jobs.yml](../eng/pipelines/sdk-perf-jobs.yml) for SDK-based scenario and +benchmark jobs. It backs the internal `dotnet-performance` pipeline (definition 306) +and the public `performance-ci` pipeline (definition 38). + +The entrypoint always enables asynchronous submission and includes the standalone +Helix Job Monitor, its pool provider, and its parameters, including on public and PR +runs. The monitor runs alongside submitters in the same implicit stage, waits for +their Helix work items, and reports failures to Azure DevOps. The existing manual +job-selection parameters and schedules are unchanged: public runs always select +correctness jobs. Internal manual runs must select workloads; leaving all three +job-selection flags false still includes the monitor and fails because no Helix jobs +were submitted (`allowNoHelixJobs: false`). Submitter and work-item failures also +continue to fail the run. + +The monitor job has a six-hour timeout (355 minutes for the tool, leaving five minutes +for it to exit). Existing 320-minute submitter limits and Helix work-item timeouts are +unchanged. These limits start when the respective job runs; they are not a whole-run +wall-clock deadline that includes time waiting for agents. + +Internal runs, including internal PR runs, import `DotNet-HelixApi-Access`. The +monitor forwards `$(HelixApiAccessToken)` directly, matching the shared pipeline +convention. Internal runs use the imported credential. Public runs, including public +PR runs, do not import that group and use public Helix access. Direct forwarding +does not change how Azure DevOps expands variables or how the SDK handles tokens. +Azure DevOps timeline access and result reporting still use the job's +`System.AccessToken`. The tool is restored from +`.config/dotnet-tools.json` in its own checkout; `eng/Version.Details.xml` tracks that +pin alongside the Helix SDK. + +Monitor test-run names include the matrix-expanded job display name. This keeps +different channels in the same phase and Helix queue independent while preserving a +stable identity when the same leg is retried. + +Submitter build logs still use the existing `Logs_*` pipeline artifacts. Benchmark +results and diagnostics are still uploaded from the Helix work items to PerfLab and +Helix, respectively. The monitor reports test results and links to Helix consoles; it +does not download arbitrary Helix uploads into pipeline artifacts. Asynchronous sends +skip the submitter's `artifacts/helix-results` downloads, which were not published by +this pipeline. Local `--send-to-helix` runs still wait and download performance reports. + ## SDK Build Throughput Scenario **SDK Build Throughput** is a scenario test that measures the throughput of SDK build process. To be more specific, our test *implicitly calls* diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml index 37c4f335c2a..40f2fd8843c 100644 --- a/eng/Version.Details.xml +++ b/eng/Version.Details.xml @@ -35,6 +35,10 @@ https://github.com/dotnet/dotnet bcd0a2de8927de44b65f3ad41bef8820ee2b3d0b + + https://github.com/dotnet/dotnet + bcd0a2de8927de44b65f3ad41bef8820ee2b3d0b + https://github.com/dotnet/xharness 1665037768fd7eec44e046d94fd07b8c6407c966 diff --git a/eng/common/dotnet.sh b/eng/common/dotnet.sh old mode 100644 new mode 100755