From 9239746c1cfc670b6ef16ac9d5bcf58780afacaf Mon Sep 17 00:00:00 2001 From: Parker Bibus Date: Thu, 15 Oct 2026 11:33:46 -0700 Subject: [PATCH 1/2] Use public preview SDKs for .NET 11 performance channels Avoid daily RTM SDKs whose matching runtime packs are unavailable in the configured feeds. Preserve explicit SDK versions and document the temporary channel selection. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: e2db743d-22b0-4641-bd38-9c84eb316d28 --- docs/benchmarking-workflow-dotnet-runtime.md | 9 ++++ scripts/channel_map.py | 9 ++-- scripts/tests/test_dotnet.py | 44 ++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/docs/benchmarking-workflow-dotnet-runtime.md b/docs/benchmarking-workflow-dotnet-runtime.md index 966c073fa3e..7c968ac7cc8 100644 --- a/docs/benchmarking-workflow-dotnet-runtime.md +++ b/docs/benchmarking-workflow-dotnet-runtime.md @@ -52,6 +52,15 @@ corresponding ARM64 Mono builds while retaining CoreCLR jobs. The WASM template skips the Mono-only `non-v8` build when disabled; runtime owns the build flavors for the retained `v8` profile. These controls do not remove manual Mono support. +The .NET 11 channels (`main`, `11.0`, `release/11.0`, and `nativeaot11.0`) in +`scripts/channel_map.py` temporarily use `preview` quality instead of `daily`. +Daily RTM SDKs request `11.0.0` runtime packs that are not yet available in the +configured feeds, preventing the self-contained CertHelper publish. Preview +quality follows public prerelease SDKs rather than pinning a specific version. +This applies wherever these channels acquire an SDK, including WASM SDK-cohort +runs; artifact-provided WASM SDKs and explicit SDK versions remain unchanged. +Revisit the quality selection once the RTM runtime packs can be restored. + ### Code Organization All Libraries benchmarks which have been ported from the old CoreFX repository belong to the corresponding folders: `libraries\$namespace`. The Runtime (old CoreCLR) benchmarks can be found in `runtime` subfolder. The directory structure is the following (some folders have been omitted for brevity): diff --git a/scripts/channel_map.py b/scripts/channel_map.py index 0d5de09b272..22d3ee0c186 100644 --- a/scripts/channel_map.py +++ b/scripts/channel_map.py @@ -1,21 +1,22 @@ from typing import Optional class ChannelMap(): + # Use public .NET 11 previews until RTM runtime packs are available for tool restores. channel_map = { 'main': { 'tfm': 'net11.0', 'branch': '11.0', - 'quality': 'daily' + 'quality': 'preview' }, '11.0': { 'tfm': 'net11.0', 'branch': '11.0', - 'quality': 'daily' + 'quality': 'preview' }, 'release/11.0': { 'tfm': 'net11.0', 'branch': '11.0', - 'quality': 'daily' + 'quality': 'preview' }, '10.0': { 'tfm': 'net10.0', @@ -33,7 +34,7 @@ class ChannelMap(): 'nativeaot11.0': { 'tfm': 'nativeaot11.0', 'branch': '11.0', - 'quality': 'daily' + 'quality': 'preview' }, '9.0': { 'tfm': 'net9.0', diff --git a/scripts/tests/test_dotnet.py b/scripts/tests/test_dotnet.py index 3e623d38e61..28e00e68e6b 100644 --- a/scripts/tests/test_dotnet.py +++ b/scripts/tests/test_dotnet.py @@ -3,6 +3,7 @@ ''' from scripts.dotnet import CSharpProject, CSharpProjFile +from scripts import dotnet import os import subprocess from unittest.mock import Mock @@ -10,6 +11,49 @@ import pytest +@pytest.mark.parametrize("platform", ["win32", "linux"]) +@pytest.mark.parametrize( + ("channel", "versions", "expected_selection"), + [ + ("main", [], ["-Channel", "11.0", "-Quality", "preview"]), + ("11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), + ("release/11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), + ("nativeaot11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), + ("release/10.0", [], ["-Channel", "10.0"]), + ("nativeaot10.0", [], ["-Channel", "10.0", "-Quality", "daily"]), + ("main", ["11.0.100-rc.2.26508.107"], ["-Version", "11.0.100-rc.2.26508.107"]), + ], +) +def test_install_sdk_selection( + tmp_path, monkeypatch, platform, channel, versions, expected_selection): + response = Mock() + response.info.return_value = {"Content-Type": "text/plain"} + response.read.return_value = b"dotnet-install" + download = Mock() + download.return_value.__enter__ = Mock(return_value=response) + download.return_value.__exit__ = Mock(return_value=False) + command = Mock() + monkeypatch.setattr(dotnet, "platform", platform) + monkeypatch.setattr(dotnet, "urlopen", download) + monkeypatch.setattr(dotnet, "RunCommand", command) + monkeypatch.setattr(dotnet, "setup_dotnet", Mock()) + monkeypatch.setattr(dotnet, "get_repo_root_path", lambda: str(tmp_path / "performance")) + install_dir = str(tmp_path / "sdk") + + dotnet.install( + architecture="x64", + channels=[channel], + versions=versions, + verbose=False, + install_dir=install_dir, + ) + + command.assert_called_once() + arguments = command.call_args.args[0] + selection_start = arguments.index("-Architecture") + 2 + assert arguments[selection_start:] == expected_selection + + def test_new(): CSharpProject.new('console', 'test_new', 'test_bin', False, '.') assert os.path.isdir('test_new') From c5756e4f0bb5957be586ec917f69899347eb6d8d Mon Sep 17 00:00:00 2001 From: Parker Bibus Date: Thu, 15 Oct 2026 12:49:08 -0700 Subject: [PATCH 2/2] Remove SDK channel tests and documentation additions Keep the preview-channel workaround scoped to channel_map.py. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: e2db743d-22b0-4641-bd38-9c84eb316d28 --- docs/benchmarking-workflow-dotnet-runtime.md | 9 ---- scripts/tests/test_dotnet.py | 44 -------------------- 2 files changed, 53 deletions(-) diff --git a/docs/benchmarking-workflow-dotnet-runtime.md b/docs/benchmarking-workflow-dotnet-runtime.md index 7c968ac7cc8..966c073fa3e 100644 --- a/docs/benchmarking-workflow-dotnet-runtime.md +++ b/docs/benchmarking-workflow-dotnet-runtime.md @@ -52,15 +52,6 @@ corresponding ARM64 Mono builds while retaining CoreCLR jobs. The WASM template skips the Mono-only `non-v8` build when disabled; runtime owns the build flavors for the retained `v8` profile. These controls do not remove manual Mono support. -The .NET 11 channels (`main`, `11.0`, `release/11.0`, and `nativeaot11.0`) in -`scripts/channel_map.py` temporarily use `preview` quality instead of `daily`. -Daily RTM SDKs request `11.0.0` runtime packs that are not yet available in the -configured feeds, preventing the self-contained CertHelper publish. Preview -quality follows public prerelease SDKs rather than pinning a specific version. -This applies wherever these channels acquire an SDK, including WASM SDK-cohort -runs; artifact-provided WASM SDKs and explicit SDK versions remain unchanged. -Revisit the quality selection once the RTM runtime packs can be restored. - ### Code Organization All Libraries benchmarks which have been ported from the old CoreFX repository belong to the corresponding folders: `libraries\$namespace`. The Runtime (old CoreCLR) benchmarks can be found in `runtime` subfolder. The directory structure is the following (some folders have been omitted for brevity): diff --git a/scripts/tests/test_dotnet.py b/scripts/tests/test_dotnet.py index 28e00e68e6b..3e623d38e61 100644 --- a/scripts/tests/test_dotnet.py +++ b/scripts/tests/test_dotnet.py @@ -3,7 +3,6 @@ ''' from scripts.dotnet import CSharpProject, CSharpProjFile -from scripts import dotnet import os import subprocess from unittest.mock import Mock @@ -11,49 +10,6 @@ import pytest -@pytest.mark.parametrize("platform", ["win32", "linux"]) -@pytest.mark.parametrize( - ("channel", "versions", "expected_selection"), - [ - ("main", [], ["-Channel", "11.0", "-Quality", "preview"]), - ("11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), - ("release/11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), - ("nativeaot11.0", [], ["-Channel", "11.0", "-Quality", "preview"]), - ("release/10.0", [], ["-Channel", "10.0"]), - ("nativeaot10.0", [], ["-Channel", "10.0", "-Quality", "daily"]), - ("main", ["11.0.100-rc.2.26508.107"], ["-Version", "11.0.100-rc.2.26508.107"]), - ], -) -def test_install_sdk_selection( - tmp_path, monkeypatch, platform, channel, versions, expected_selection): - response = Mock() - response.info.return_value = {"Content-Type": "text/plain"} - response.read.return_value = b"dotnet-install" - download = Mock() - download.return_value.__enter__ = Mock(return_value=response) - download.return_value.__exit__ = Mock(return_value=False) - command = Mock() - monkeypatch.setattr(dotnet, "platform", platform) - monkeypatch.setattr(dotnet, "urlopen", download) - monkeypatch.setattr(dotnet, "RunCommand", command) - monkeypatch.setattr(dotnet, "setup_dotnet", Mock()) - monkeypatch.setattr(dotnet, "get_repo_root_path", lambda: str(tmp_path / "performance")) - install_dir = str(tmp_path / "sdk") - - dotnet.install( - architecture="x64", - channels=[channel], - versions=versions, - verbose=False, - install_dir=install_dir, - ) - - command.assert_called_once() - arguments = command.call_args.args[0] - selection_start = arguments.index("-Architecture") + 2 - assert arguments[selection_start:] == expected_selection - - def test_new(): CSharpProject.new('console', 'test_new', 'test_bin', False, '.') assert os.path.isdir('test_new')