Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
f7191bb
Upgrade to PowerShell 7 (#16075)
JunielKatarn May 7, 2026
1a5f67f
Fix PowerShell installation (#16164)
JunielKatarn May 20, 2026
648c393
Upgrade to Visual Studio 2026 (#16170)
JunielKatarn May 28, 2026
8248e54
Upgrade to GoogleTest Adapter 1.8.1.8 (#16218)
JunielKatarn Jun 5, 2026
8cc319f
Upgrade CI agents to Windows Server 2025 (#16208)
JunielKatarn Jun 5, 2026
fad7061
Add rnw-img-vs2026-node24.json (#16224)
JunielKatarn Jun 6, 2026
538cdf4
Update CI verdaccio to 6.7.2 (#16223)
JunielKatarn Jun 6, 2026
585d912
Upgrade to Microsoft.WindowsAppSDK 1.8.260508005 (#16225)
JunielKatarn Jun 6, 2026
13fed7c
fix: WebSocket binaryType handling — stop unconditional Blob intercep…
gmacmaster Jun 7, 2026
fca8fd9
Upgrade projects to .NET 10 (#16226)
JunielKatarn Jun 8, 2026
0034008
Fix missing conflicts
JunielKatarn Jun 8, 2026
49e1577
Update packages lock
JunielKatarn Jun 9, 2026
447c038
Remove extra yarn step
JunielKatarn Jun 9, 2026
d1e679e
Merge branch 'vs18-win25-ps7-net10-wsab-84' of github.com:jurocha-ms/…
JunielKatarn Jun 9, 2026
e9bfd6d
Re-introduce JS Desktop integration tests (#16228)
JunielKatarn Jun 9, 2026
32286f9
Remove ban-types
JunielKatarn Jun 9, 2026
1013c4a
Fix DynamicReaderWriterTests
JunielKatarn Jun 9, 2026
3badb2d
Use WinRT coroutine types for UwpScriptStore
JunielKatarn Jun 9, 2026
17f2644
clang format
JunielKatarn Jun 9, 2026
8fbb256
Add missing find-dotnet-tools
JunielKatarn Jun 10, 2026
7f50e37
Increase timeout to 25 min
JunielKatarn Jun 10, 2026
00e7b83
Increase yarn lint timeout to 45 min
JunielKatarn Jun 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions .ado/build-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ parameters:
default:
Medium:
name: rnw-pool-4-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24
Large:
name: rnw-pool-8-microsoft
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24

- name: desktopBuildMatrix
type: object
Expand Down Expand Up @@ -161,6 +161,13 @@ extends:
version: '24.x'
displayName: Use Node.js 24.x

# TODO: REMOVE. Should be included in image.
- task: CmdLine@2
inputs:
script: |
npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2
displayName: Install Node base packages

- template: .ado/templates/compute-beachball-branch-name.yml@self

# 4. Beachball tooling (developer builds only)
Expand Down Expand Up @@ -274,6 +281,7 @@ extends:
#12714 - Disable for first deployment of test website.
- name: Desktop.IntegrationTests.Filter
value: >
(FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests)&
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectClose)&
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::ConnectNoClose)&
(FullyQualifiedName!=Microsoft::React::Test::WebSocketIntegrationTest::SendReceiveClose)&
Expand Down
66 changes: 66 additions & 0 deletions .ado/image/rnw-img-vs2026-node24.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
{
"artifacts": [
{
"name": "windows-EnableDeveloperMode"
},
{
"name": "windows-enable-long-paths"
},
{
"name": "Windows-ServerAddFeature",
"parameters": {
"FeatureName": "Web-Server"
}
},
{
"name": "Windows-ServerAddFeature",
"parameters": {
"FeatureName": "Web-Scripting-Tools"
}
},
{
"name": "windows-gitinstall"
},
{
"name": "windows-AzPipeline-ImageHelpers"
},
{
"name": "windows-AzPipeline-InitializeVM"
},
{
"name": "windows-AzPipeline-powershellCore"
},
{
"name": "windows-AzPipeline-7zip"
},
{
"name": "windows-visualstudio-bootstrapper",
"parameters": {
"Workloads": "--add Microsoft.VisualStudio.Workload.ManagedDesktop --add Microsoft.VisualStudio.Workload.NativeDesktop --add Microsoft.VisualStudio.Workload.Universal --add Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core --add Microsoft.VisualStudio.ComponentGroup.UWP.Support --add Microsoft.VisualStudio.ComponentGroup.UWP.VC --add Microsoft.Component.MSBuild --add Microsoft.VisualStudio.Component.VC.Tools.x86.x64 --add Microsoft.VisualStudio.Component.Windows11SDK.22621 --includeRecommended --includeOptional",
"SKU": "Enterprise",
"VSBootstrapperURL": "https://aka.ms/vs/18/stable/vs_Enterprise.exe"
}
},
{
"name": "Windows-NodeJS",
"parameters": {
"Version": "24.16.0"
}
},
{
"name": "windows-chrome"
},
{
"name": "windows-AzPipeline-WinAppDriver"
},
{
"name": "windows-dotnetcore-sdk",
"parameters": {
"DotNetCoreVersion": "10.0.300"
}
},
{
"name": "Windows-AzureCLI"
}
]
}
33 changes: 9 additions & 24 deletions .ado/jobs/desktop-single.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,35 +24,24 @@ steps:
- template: ../templates/checkout-shallow.yml

# Set up IIS for integration tests
- pwsh: |
Install-WindowsFeature -Name Web-Server, Web-Scripting-Tools
displayName: Install IIS

- pwsh: |
$DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1"

& $DownloadScript `
-Uri 'https://download.visualstudio.microsoft.com/download/pr/20598243-c38f-4538-b2aa-af33bc232f80/ea9b2ca232f59a6fdc84b7a31da88464/dotnet-hosting-8.0.3-win.exe' `
-OutFile dotnet-hosting-8.0.3-win.exe
-Uri 'https://builds.dotnet.microsoft.com/dotnet/aspnetcore/Runtime/10.0.8/dotnet-hosting-10.0.8-win.exe' `
-OutFile dotnet-hosting-10.0.8-win.exe

Write-Host 'Installing .NET hosting bundle'
Start-Process -Wait -FilePath .\dotnet-hosting-8.0.3-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
Start-Process -Wait -FilePath .\dotnet-hosting-10.0.8-win.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
Write-Host 'Installed .NET hosting bundle'

& $DownloadScript `
-Uri 'https://download.visualstudio.microsoft.com/download/pr/f2ec926e-0d98-4a8b-8c70-722ccc2ca0e5/b59941b0c60f16421679baafdb7e9338/dotnet-sdk-7.0.407-win-x64.exe' `
-OutFile dotnet-sdk-7.0.407-win-x64.exe

Write-Host 'Installing .NET 7 SDK'
Start-Process -Wait -FilePath .\dotnet-sdk-7.0.407-win-x64.exe -ArgumentList '/INSTALL', '/QUIET', '/NORESTART'
Write-Host 'Installed .NET 7 SDK'
displayName: Install the .NET Core Hosting Bundle

# Version should match NuGet package version used at vnext\PropertySheets\WinUI.props: WinUI3Version
- pwsh: |
$DownloadScript = "$(Build.SourcesDirectory)\vnext\Scripts\Tfs\Invoke-WebRequestWithRetry.ps1"

& $DownloadScript `
-Uri 'https://aka.ms/windowsappsdk/1.8/latest/windowsappruntimeinstall-x64.exe' `
-Uri 'https://aka.ms/windowsappsdk/1.8/1.8.260508005/windowsappruntimeinstall-x64.exe' `
-OutFile windowsappruntimeinstall-x64.exe

Write-Host 'Installing Windows App SDK Runtime'
Expand All @@ -70,12 +59,6 @@ steps:

- template: ../templates/apply-published-version-vars.yml

- ${{ if eq(variables['Desktop.IntegrationTests.SkipRNTester'], true) }}:
- pwsh: |
$newValue = '(FullyQualifiedName!~Microsoft::React::Test::RNTesterHeadlessTests::)&' + "$(Desktop.IntegrationTests.Filter)"
Write-Host "##vso[task.setvariable variable=Desktop.IntegrationTests.Filter]$newValue"
displayName: Update Desktop.IntegrationTests.Filter to exclude RNTester integration tests

- template: ../templates/msbuild-sln.yml
parameters:
solutionDir: vnext
Expand All @@ -97,7 +80,7 @@ steps:
- template: ../templates/discover-google-test-adapter.yml

- ${{ if ne(parameters.buildPlatform, 'ARM64EC') }}:
- task: VSTest@2
- task: VSTest@3
displayName: Run Desktop Unit Tests
timeoutInMinutes: 5 # Set smaller timeout, due to hangs
inputs:
Expand All @@ -115,6 +98,7 @@ steps:
publishRunAttachments: true
collectDumpOn: onAbortOnly
vsTestVersion: latest
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
failOnMinTestsNotRun: true

# Suspected debug assert in TestRunner hanging tests randomly. Run only on Release for now.
Expand Down Expand Up @@ -211,7 +195,7 @@ steps:
Invoke-WebRequest -UseBasicParsing -Uri "http://localhost:8081/IntegrationTests/IntegrationTestsApp.bundle?platform=windows&dev=true"
continueOnError: true

- task: VSTest@2
- task: VSTest@3
displayName: Run Desktop Integration Tests
inputs:
testSelector: testAssemblies
Expand All @@ -224,6 +208,7 @@ steps:
publishRunAttachments: true
collectDumpOn: onAbortOnly
vsTestVersion: latest
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
failOnMinTestsNotRun: true
otherConsoleOptions: '/blame -- RunConfiguration.TestSessionTimeout=300000'

Expand Down
15 changes: 15 additions & 0 deletions .ado/jobs/e2e-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,21 @@ jobs:
condition: and(failed(), eq(variables.StartedFabricTests, 'true'))
continueOnError: true

- pwsh: |
if (Test-Path "packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__") {
Write-Host "##vso[task.setvariable variable=DiffOutputExists]true"
}
displayName: Check for image diff output folder
condition: failed()

- task: CopyFiles@2
displayName: Copy Fabric image diffs
inputs:
sourceFolder: packages/e2e-test-app-fabric/test/__image_snapshots__/__diff_output__
targetFolder: $(Build.StagingDirectory)/snapshots-image-diffs
contents: "**"
condition: and(failed(), eq(variables.DiffOutputExists, 'true'))

- script: npx jest --clearCache
displayName: clear jest cache
workingDirectory: packages/e2e-test-app-fabric
Expand Down
2 changes: 1 addition & 1 deletion .ado/jobs/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ parameters:
jobs:
- job: Linting
displayName: Linting
timeoutInMinutes: 40
timeoutInMinutes: 45
variables: [template: ../variables/windows.yml]
pool: ${{ parameters.AgentPool.Medium }}
steps:
Expand Down
4 changes: 2 additions & 2 deletions .ado/jobs/node-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@ parameters:

- name: versions
type: object
default: [22]
default: [24]

jobs:
- ${{ each nodeVersion in parameters.versions }}:
- job: NodeTests${{ nodeVersion }}
displayName: Node Tests v${{ nodeVersion }}
timeoutInMinutes: 20
timeoutInMinutes: 25
variables: [template: ../variables/windows.yml]
pool: ${{ parameters.AgentPool.Medium }}

Expand Down
3 changes: 2 additions & 1 deletion .ado/jobs/universal-single.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ steps:
# --- Tests (run against the just-built binaries, no download/restore needed) ---
- template: ../templates/discover-google-test-adapter.yml

- task: VSTest@2
- task: VSTest@3
displayName: Run Universal Unit Tests (Native)
timeoutInMinutes: 5 # Set smaller timeout, due to hangs
inputs:
Expand All @@ -67,5 +67,6 @@ steps:
publishRunAttachments: true
collectDumpOn: onAbortOnly
vsTestVersion: latest
vstestLocation: C:\Program Files\Microsoft Visual Studio\18\Enterprise\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
failOnMinTestsNotRun: true
condition: and(succeeded(), not(eq('${{ parameters.buildPlatform }}', 'ARM64')))
4 changes: 2 additions & 2 deletions .ado/pr-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ extends:
AgentPool:
Medium:
name: rnw-pool-4
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24
Large:
name: rnw-pool-8
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24
2 changes: 1 addition & 1 deletion .ado/scripts/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ function ensureNuGet(toolsPath) {
ensureDir(toolsPath);
console.log(`Downloading nuget.exe to: ${localNuGet}`);
execSync(
`powershell.exe -NoLogo -NoProfile -Command ` +
`pwsh.exe -NoLogo -NoProfile -Command ` +
`"[Net.ServicePointManager]::SecurityProtocol = ` +
`[Net.SecurityProtocolType]::Tls12; ` +
`Invoke-WebRequest -Uri 'https://dist.nuget.org/win-x86-commandline/latest/nuget.exe' ` +
Expand Down
12 changes: 7 additions & 5 deletions .ado/templates/discover-google-test-adapter.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
steps:

- pwsh: |
$vsExtensionPath="${env:ProgramFiles}\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\Extensions\";
$GoogleTestAdapterPath=(Get-ChildItem $vsExtensionPath -Directory | Where-Object -FilterScript {Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll")}).FullName
$extensionsPath = "${env:ProgramFiles}\Microsoft Visual Studio\18\Enterprise\Common7\IDE\Extensions"
$adapterPath = Get-ChildItem $extensionsPath -Directory |`
Where-Object -FilterScript { Test-Path (Join-Path -Path $_.FullName -ChildPath "GoogleTestAdapter.Core.dll") } |`
Select-Object -ExpandProperty FullName

# Test the path to the google test adapter
Test-Path -Path $GoogleTestAdapterPath
Test-Path -Path $adapterPath

Write-Debug "Setting Google Test Adapter Path to '$GoogleTestAdapterPath' found in '$vsExtensionPath'"
Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$GoogleTestAdapterPath"
Write-Debug "Setting Google Test Adapter Path to '$adapterPath' found in '$extensionsPath'"
Write-Host "##vso[task.setvariable variable=GoogleTestAdapterPath]$adapterPath"
displayName: Set GoogleTestAdapterPath
1 change: 1 addition & 0 deletions .ado/templates/install-SDK.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,6 @@ steps:
targetType: filePath
filePath: vnext\Scripts\Install-WindowsSdkISO.ps1
arguments: ${{ parameters.sdkVersion }}
pwsh: true
displayName: 'Install Insider SDK (${{ parameters.sdkVersion }})'
condition: ne('', '${{ parameters.sdkVersion }}')
4 changes: 2 additions & 2 deletions .ado/templates/msbuild-sln.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@ parameters:
# NuGet & MSBuild
solutionDir:
solutionName:
msbuildVersion: 17.0
msbuildVersion: 18.0
msBuildArchitecture: x64
preferredToolArchitecture: x64
platformToolset: v143
platformToolset: v145
buildPlatform: x64
buildConfiguration: Debug
msbuildArguments: ''
Expand Down
2 changes: 1 addition & 1 deletion .ado/templates/react-native-debug-info.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ parameters:
type: string
- name: doctor
type: boolean
default: true
default: false
- name: config
type: boolean
default: true
Expand Down
12 changes: 12 additions & 0 deletions .ado/templates/strict-yarn-install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,18 @@ steps:
$packageJson | ConvertTo-Json | Out-File ./package.json
displayName: Remove postinstall

- task: UseNode@1
inputs:
version: '24.x'
displayName: Use Node.js 24.x

# TODO: REMOVE. Should be included in image.
- task: CmdLine@2
inputs:
script: |
npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2
displayName: Install Node base packages

- script: npx --yes midgard-yarn-strict@1.2.4 ${{ parameters.workspace }}
displayName: Strict yarn install ${{ parameters.workspace }}
retryCountOnTaskFailure: 2
2 changes: 1 addition & 1 deletion .ado/templates/verdaccio-start.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ steps:
- script: |
for %%f in (npm-pkgs\*.tgz) do (
echo Publishing %%f to verdaccio...
npm publish "%%f" --registry http://localhost:4873 --access public
npm publish "%%f" --registry http://localhost:4873 --access public --tag canary
)
displayName: Publish packages to verdaccio
Expand Down
14 changes: 13 additions & 1 deletion .ado/templates/yarn-install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,19 @@ parameters:
- HostedImage

steps:
# When using our own images, prefer the machine-installed version of
- task: UseNode@1
inputs:
version: '24.x'
displayName: Use Node.js 24.x

# TODO: REMOVE. Should be included in image.
- task: CmdLine@2
inputs:
script: |
npm install --global yarn@1.22.22 midgard-yarn@1.23.34 verdaccio@6.7.2
displayName: Install Node base packages

# When using our own images, prefer the machine-installed version of
# `midgard-yarn`.
- ${{ if eq(parameters.agentImage, 'ManagedImage') }}:
- script: midgard-yarn --ignore-scripts --frozen-lockfile --cwd ${{ parameters.workingDirectory }}
Expand Down
4 changes: 2 additions & 2 deletions .ado/windows-vs-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ extends:
AgentPool:
Medium:
name: rnw-pool-4
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24
Large:
name: rnw-pool-8
demands: ImageOverride -equals rnw-img-vs2022-node22
demands: ImageOverride -equals rnw-img-vs2026-node24
Loading
Loading