From 7c1e5aed2c1204bbcb881314ba74d41701da9b08 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Thu, 8 Jan 2026 15:38:09 +0000 Subject: [PATCH 1/9] Try build internal --- eng/pipelines/ci-device-tests.yml | 46 ++++++++++++++++--- eng/pipelines/ci-uitests.yml | 74 ++++++++++++++++++++++++++----- 2 files changed, 101 insertions(+), 19 deletions(-) diff --git a/eng/pipelines/ci-device-tests.yml b/eng/pipelines/ci-device-tests.yml index c54287a0551d..2b1d0ae3b44d 100644 --- a/eng/pipelines/ci-device-tests.yml +++ b/eng/pipelines/ci-device-tests.yml @@ -50,7 +50,30 @@ variables: parameters: -- name: windowsPool +# Internal pools (dnceng) +- name: windowsPoolInternal + type: object + default: + name: NetCore1ESPool-Internal + demands: + - ImageOverride -equals 1es-windows-2022 + image: 1es-windows-2022 + os: Windows + +- name: macOSTestPoolInternal + type: object + default: + name: Azure Pipelines + vmImage: macOS-15 + +- name: macOSPoolInternal + type: object + default: + name: MAUI + vmImage: MAUI + +# Public pools (dnceng-public) +- name: windowsPoolPublic type: object default: name: NetCore-Public @@ -59,13 +82,13 @@ parameters: image: 1es-windows-2022-open os: Windows -- name: macOSTestPool +- name: macOSTestPoolPublic type: object default: name: Azure Pipelines vmImage: macOS-15 -- name: macOSPool +- name: macOSPoolPublic type: object default: name: MAUI @@ -84,9 +107,15 @@ stages: # Use Helix for iOS / Android and MacCatalyst Device Tests - template: /eng/pipelines/arcade/stage-device-tests.yml@self parameters: - buildPool: ${{ parameters.macOSPool }} - testPool: ${{ parameters.windowsPool }} - runAsPublic: true + # Select pools based on pipeline - internal vs public + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + buildPool: ${{ parameters.macOSPoolInternal }} + testPool: ${{ parameters.windowsPoolInternal }} + runAsPublic: false + ${{ else }}: + buildPool: ${{ parameters.macOSPoolPublic }} + testPool: ${{ parameters.windowsPoolPublic }} + runAsPublic: true TargetFrameworkVersion: ${{ targetFrameworkVersion.tfm }} prepareSteps: - template: /eng/pipelines/common/provision.yml@self @@ -104,7 +133,10 @@ stages: # Just use the old way for Windows Device Tests - template: common/device-tests.yml parameters: - windowsPool: ${{ parameters.windowsPool }} + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + windowsPool: ${{ parameters.windowsPoolInternal }} + ${{ else }}: + windowsPool: ${{ parameters.windowsPoolPublic }} targetFrameworkVersion: ${{ targetFrameworkVersion }} windowsVersions: [ 'packaged', 'unpackaged' ] skipProvisioning: true diff --git a/eng/pipelines/ci-uitests.yml b/eng/pipelines/ci-uitests.yml index 6a821cb21202..cb1526b6d4fd 100644 --- a/eng/pipelines/ci-uitests.yml +++ b/eng/pipelines/ci-uitests.yml @@ -62,7 +62,8 @@ parameters: type: boolean default: false - - name: androidPool + # Internal pools (dnceng) + - name: androidPoolInternal type: object default: name: MAUI @@ -70,14 +71,54 @@ parameters: demands: - Agent.OSArchitecture -equals ARM64 - - name: androidPoolLinux + - name: androidPoolLinuxInternal + type: object + default: + name: NetCore1ESPool-Internal + demands: + - ImageOverride -equals 1ESPT-Ubuntu22.04 + + - name: iosPoolInternal + type: object + default: + name: MAUI + vmImage: MAUI + + - name: windowsBuildPoolInternal + type: object + default: + name: NetCore1ESPool-Internal + demands: + - ImageOverride -equals 1es-windows-2022 + + - name: windowsPoolInternal + type: object + default: + name: NetCore1ESPool-Internal + demands: + - ImageOverride -equals 1es-windows-2022 + + - name: macosPoolInternal + type: object + default: + name: Azure Pipelines + vmImage: macOS-15 + + # Public pools (dnceng-public) + - name: androidPoolPublic + type: object + default: + name: MAUI + vmImage: MAUI + + - name: androidPoolLinuxPublic type: object default: name: MAUI-DNCENG demands: - ImageOverride -equals 1ESPT-Ubuntu22.04 - - name: iosPool + - name: iosPoolPublic type: object default: name: MAUI @@ -85,21 +126,21 @@ parameters: demands: - Agent.OSArchitecture -equals ARM64 - - name: windowsBuildPool + - name: windowsBuildPoolPublic type: object default: name: NetCore-Public demands: - ImageOverride -equals 1es-windows-2022-open - - name: windowsPool + - name: windowsPoolPublic type: object default: name: NetCore-Public demands: - ImageOverride -equals 1es-windows-2022-open - - name: macosPool + - name: macosPoolPublic type: object default: name: Azure Pipelines @@ -109,12 +150,21 @@ stages: - template: common/ui-tests.yml parameters: - androidPool: ${{ parameters.androidPool }} - androidLinuxPool: ${{ parameters.androidPoolLinux }} - iosPool: ${{ parameters.iosPool }} - windowsPool: ${{ parameters.windowsPool }} - windowsBuildPool: ${{ parameters.windowsBuildPool }} - macosPool: ${{ parameters.macosPool }} + # Select pools based on pipeline - internal vs public + ${{ if eq(variables['System.TeamProject'], 'internal') }}: + androidPool: ${{ parameters.androidPoolInternal }} + androidLinuxPool: ${{ parameters.androidPoolLinuxInternal }} + iosPool: ${{ parameters.iosPoolInternal }} + windowsPool: ${{ parameters.windowsPoolInternal }} + windowsBuildPool: ${{ parameters.windowsBuildPoolInternal }} + macosPool: ${{ parameters.macosPoolInternal }} + ${{ else }}: + androidPool: ${{ parameters.androidPoolPublic }} + androidLinuxPool: ${{ parameters.androidPoolLinuxPublic }} + iosPool: ${{ parameters.iosPoolPublic }} + windowsPool: ${{ parameters.windowsPoolPublic }} + windowsBuildPool: ${{ parameters.windowsBuildPoolPublic }} + macosPool: ${{ parameters.macosPoolPublic }} # BuildNativeAOT is false by default, but true in devdiv environment BuildNativeAOT: ${{ or(parameters.BuildNativeAOT, and(ne(variables['Build.Reason'], 'PullRequest'), eq(variables['System.TeamProject'], 'devdiv'))) }} RunNativeAOT: ${{ parameters.RunNativeAOT }} From 4f0cb82367dcc8644ca1a169eea6359dc223f0e7 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Thu, 8 Jan 2026 18:39:46 +0000 Subject: [PATCH 2/9] Try again --- eng/helix_xharness.proj | 11 ++++++++--- eng/pipelines/arcade/stage-device-tests.yml | 20 ++++++++++++++++---- eng/pipelines/ci-device-tests.yml | 4 ++-- 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/eng/helix_xharness.proj b/eng/helix_xharness.proj index d7c0a6c5e42e..ffebd2cca187 100644 --- a/eng/helix_xharness.proj +++ b/eng/helix_xharness.proj @@ -3,9 +3,14 @@ test/devices/ $(BUILD_BUILDNUMBER) default - osx.15.arm64.maui.open - osx.15.arm64.maui.open - ubuntu.2204.amd64.android.33.open + + osx.15.arm64.maui.open + osx.15.arm64.maui.open + ubuntu.2204.amd64.android.33.open + + osx.15.arm64 + osx.15.arm64 + ubuntu.2204.amd64.android.33 true maui true diff --git a/eng/pipelines/arcade/stage-device-tests.yml b/eng/pipelines/arcade/stage-device-tests.yml index e46595934779..d54a8218019f 100644 --- a/eng/pipelines/arcade/stage-device-tests.yml +++ b/eng/pipelines/arcade/stage-device-tests.yml @@ -145,7 +145,10 @@ stages: - template: /eng/common/templates-official/steps/send-to-helix.yml parameters: HelixProjectPath: ${{ parameters.helixProject }} - HelixProjectArguments: /p:TargetOS=ios /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsIOS_ + ${{ if eq(parameters.runAsPublic, true) }}: + HelixProjectArguments: /p:TargetOS=ios /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsIOS_ /p:HelixInternal=False + ${{ else }}: + HelixProjectArguments: /p:TargetOS=ios /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsIOS_ /p:HelixInternal=True HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsIOS @@ -195,7 +198,10 @@ stages: - template: /eng/common/templates-official/steps/send-to-helix.yml parameters: HelixProjectPath: ${{ parameters.helixProject }} - HelixProjectArguments: /p:TargetOS=maccatalyst /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsMacCatalyst_ + ${{ if eq(parameters.runAsPublic, true) }}: + HelixProjectArguments: /p:TargetOS=maccatalyst /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsMacCatalyst_ /p:HelixInternal=False + ${{ else }}: + HelixProjectArguments: /p:TargetOS=maccatalyst /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsMacCatalyst_ /p:HelixInternal=True HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsMacCatalyst @@ -243,7 +249,10 @@ stages: - template: /eng/common/templates-official/steps/send-to-helix.yml parameters: HelixProjectPath: ${{ parameters.helixProject }} - HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsAndroid_ + ${{ if eq(parameters.runAsPublic, true) }}: + HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsAndroid_ /p:HelixInternal=False + ${{ else }}: + HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsAndroid_ /p:HelixInternal=True HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsAndroid @@ -346,7 +355,10 @@ stages: - template: ${{ iif(eq(parameters.runAsPublic, 'true'), '/eng/common/templates/steps/send-to-helix.yml', '/eng/common/templates-official/steps/send-to-helix.yml@self') }} parameters: HelixProjectPath: ${{ parameters.helixProject }} - HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig)_CoreCLR /p:TestRunNamePrefix=DeviceTestsAndroid_CoreCLR_ + ${{ if eq(parameters.runAsPublic, true) }}: + HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig)_CoreCLR /p:TestRunNamePrefix=DeviceTestsAndroid_CoreCLR_ /p:HelixInternal=False + ${{ else }}: + HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig)_CoreCLR /p:TestRunNamePrefix=DeviceTestsAndroid_CoreCLR_ /p:HelixInternal=True HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsAndroid_CoreCLR diff --git a/eng/pipelines/ci-device-tests.yml b/eng/pipelines/ci-device-tests.yml index 2b1d0ae3b44d..1a41e3d70e63 100644 --- a/eng/pipelines/ci-device-tests.yml +++ b/eng/pipelines/ci-device-tests.yml @@ -69,8 +69,8 @@ parameters: - name: macOSPoolInternal type: object default: - name: MAUI - vmImage: MAUI + name: Azure Pipelines + vmImage: macOS-15 # Public pools (dnceng-public) - name: windowsPoolPublic From cae2c4261f9f3ca2c5e31ffccf7864bf130bf928 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Fri, 9 Jan 2026 09:35:40 +0000 Subject: [PATCH 3/9] Update with token --- eng/pipelines/arcade/stage-device-tests.yml | 7 +++++++ eng/pipelines/ci-device-tests.yml | 4 ++++ 2 files changed, 11 insertions(+) diff --git a/eng/pipelines/arcade/stage-device-tests.yml b/eng/pipelines/arcade/stage-device-tests.yml index d54a8218019f..d9e70e3f617d 100644 --- a/eng/pipelines/arcade/stage-device-tests.yml +++ b/eng/pipelines/arcade/stage-device-tests.yml @@ -46,6 +46,9 @@ parameters: - name: checkoutDirectory type: string default: $(System.DefaultWorkingDirectory) +- name: HelixAccessToken + type: string + default: '' stages: - stage: devicetests_build @@ -149,6 +152,7 @@ stages: HelixProjectArguments: /p:TargetOS=ios /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsIOS_ /p:HelixInternal=False ${{ else }}: HelixProjectArguments: /p:TargetOS=ios /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsIOS_ /p:HelixInternal=True + HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsIOS @@ -202,6 +206,7 @@ stages: HelixProjectArguments: /p:TargetOS=maccatalyst /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsMacCatalyst_ /p:HelixInternal=False ${{ else }}: HelixProjectArguments: /p:TargetOS=maccatalyst /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsMacCatalyst_ /p:HelixInternal=True + HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsMacCatalyst @@ -253,6 +258,7 @@ stages: HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsAndroid_ /p:HelixInternal=False ${{ else }}: HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig) /p:TestRunNamePrefix=DeviceTestsAndroid_ /p:HelixInternal=True + HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsAndroid @@ -359,6 +365,7 @@ stages: HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig)_CoreCLR /p:TestRunNamePrefix=DeviceTestsAndroid_CoreCLR_ /p:HelixInternal=False ${{ else }}: HelixProjectArguments: /p:TargetOS=android /p:TestRunNameSuffix=_$(_BuildConfig)_CoreCLR /p:TestRunNamePrefix=DeviceTestsAndroid_CoreCLR_ /p:HelixInternal=True + HelixAccessToken: ${{ parameters.HelixAccessToken }} HelixConfiguration: $(_BuildConfig) IncludeDotNetCli: true DisplayNamePrefix: DeviceTestsAndroid_CoreCLR diff --git a/eng/pipelines/ci-device-tests.yml b/eng/pipelines/ci-device-tests.yml index 1a41e3d70e63..8962e5ce3357 100644 --- a/eng/pipelines/ci-device-tests.yml +++ b/eng/pipelines/ci-device-tests.yml @@ -47,6 +47,9 @@ variables: - template: /eng/common/templates/variables/pool-providers.yml@self - template: /eng/pipelines/common/variables.yml@self - template: /eng/pipelines/arcade/variables.yml@self +# Include Helix access token for internal builds +- ${{ if eq(variables['System.TeamProject'], 'internal') }}: + - group: DotNet-HelixApi-Access parameters: @@ -112,6 +115,7 @@ stages: buildPool: ${{ parameters.macOSPoolInternal }} testPool: ${{ parameters.windowsPoolInternal }} runAsPublic: false + HelixAccessToken: $(HelixApiAccessToken) ${{ else }}: buildPool: ${{ parameters.macOSPoolPublic }} testPool: ${{ parameters.windowsPoolPublic }} From 836cca0beaf964b1e3724cb951ea9c4e8c3f4898 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Fri, 9 Jan 2026 10:34:06 +0000 Subject: [PATCH 4/9] Bump timeout --- eng/pipelines/arcade/stage-device-tests.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/arcade/stage-device-tests.yml b/eng/pipelines/arcade/stage-device-tests.yml index d9e70e3f617d..7dc7d303b57a 100644 --- a/eng/pipelines/arcade/stage-device-tests.yml +++ b/eng/pipelines/arcade/stage-device-tests.yml @@ -74,7 +74,7 @@ stages: jobs: - job: builddevice_tests displayName: Build Device Tests (Mono) - timeoutInMinutes: 60 + timeoutInMinutes: 120 variables: - name: _BuildConfig value: ${{ parameters.BuildConfiguration }} @@ -287,7 +287,7 @@ stages: jobs: - job: builddevice_tests_coreclr displayName: Build Device Tests (CoreCLR) - timeoutInMinutes: 60 + timeoutInMinutes: 120 variables: - name: _BuildConfig value: ${{ parameters.BuildConfiguration }} From 6ab3d2ac42c9aa174ea78f2f8649166afc4f7d8a Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Fri, 9 Jan 2026 17:09:50 +0000 Subject: [PATCH 5/9] try osx26 --- eng/helix_xharness.proj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/helix_xharness.proj b/eng/helix_xharness.proj index ffebd2cca187..cf95ddf25438 100644 --- a/eng/helix_xharness.proj +++ b/eng/helix_xharness.proj @@ -8,8 +8,8 @@ osx.15.arm64.maui.open ubuntu.2204.amd64.android.33.open - osx.15.arm64 - osx.15.arm64 + osx.26.arm64 + osx.26.arm64 ubuntu.2204.amd64.android.33 true maui From bb8d25105ae034b8d2224794ad59a8d3df086e77 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Fri, 9 Jan 2026 17:29:23 +0000 Subject: [PATCH 6/9] try maui queue --- eng/helix_xharness.proj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/helix_xharness.proj b/eng/helix_xharness.proj index cf95ddf25438..c2098002af03 100644 --- a/eng/helix_xharness.proj +++ b/eng/helix_xharness.proj @@ -8,7 +8,7 @@ osx.15.arm64.maui.open ubuntu.2204.amd64.android.33.open - osx.26.arm64 + osx.26.arm64;osx.15.iphone.maui osx.26.arm64 ubuntu.2204.amd64.android.33 true From 3fef2291dd863489cc7499b1dc7f404d4c11fda3 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Fri, 9 Jan 2026 18:51:33 +0000 Subject: [PATCH 7/9] Fix --- eng/helix_xharness.proj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/helix_xharness.proj b/eng/helix_xharness.proj index c2098002af03..c202ce109ab4 100644 --- a/eng/helix_xharness.proj +++ b/eng/helix_xharness.proj @@ -8,7 +8,7 @@ osx.15.arm64.maui.open ubuntu.2204.amd64.android.33.open - osx.26.arm64;osx.15.iphone.maui + osx.26.arm64;osx.15.arm64.iphone.maui osx.26.arm64 ubuntu.2204.amd64.android.33 true From eec3e01bb3fe4cf276c211933f6f7fe6c0cc9049 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Mon, 12 Jan 2026 12:10:50 +0000 Subject: [PATCH 8/9] catalyst --- eng/pipelines/arcade/stage-device-tests.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/arcade/stage-device-tests.yml b/eng/pipelines/arcade/stage-device-tests.yml index 7dc7d303b57a..bd3718d23e08 100644 --- a/eng/pipelines/arcade/stage-device-tests.yml +++ b/eng/pipelines/arcade/stage-device-tests.yml @@ -183,7 +183,7 @@ stages: jobs: - job: device_tests_maccatalyst displayName: Run DeviceTests MacCatalyst (Mono) - timeoutInMinutes: 60 + timeoutInMinutes: 240 variables: - name: _BuildConfig value: ${{ parameters.BuildConfiguration }} From 29eaa59c8212a3aab1b70f9eb857f764e67d53b2 Mon Sep 17 00:00:00 2001 From: Rui Marinho Date: Mon, 12 Jan 2026 19:48:25 +0000 Subject: [PATCH 9/9] Updated helix_xharness.proj --- eng/helix_xharness.proj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/helix_xharness.proj b/eng/helix_xharness.proj index c202ce109ab4..8b286f416cdd 100644 --- a/eng/helix_xharness.proj +++ b/eng/helix_xharness.proj @@ -8,8 +8,8 @@ osx.15.arm64.maui.open ubuntu.2204.amd64.android.33.open - osx.26.arm64;osx.15.arm64.iphone.maui - osx.26.arm64 + osx.15.arm64.iphone.maui + osx.15.arm64.iphone.maui ubuntu.2204.amd64.android.33 true maui