Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
029f303
Upgrade to PowerShell 7 (#16075)
JunielKatarn May 7, 2026
f6c86d2
Fix PowerShell installation (#16164)
JunielKatarn May 20, 2026
b2afac9
Upgrade to Visual Studio 2026 (#16170)
JunielKatarn May 28, 2026
0de2ec3
Upgrade to GoogleTest Adapter 1.8.1.8 (#16218)
JunielKatarn Jun 5, 2026
0628d52
Upgrade CI agents to Windows Server 2025 (#16208)
JunielKatarn Jun 5, 2026
f3e2536
Add rnw-img-vs2026-node24.json (#16224)
JunielKatarn Jun 6, 2026
aceca69
Update CI verdaccio to 6.7.2 (#16223)
JunielKatarn Jun 6, 2026
1edee86
Upgrade to Microsoft.WindowsAppSDK 1.8.260508005 (#16225)
JunielKatarn Jun 6, 2026
9278e20
fix: WebSocket binaryType handling — stop unconditional Blob intercep…
gmacmaster Jun 7, 2026
b9b7bd8
Upgrade projects to .NET 10 (#16226)
JunielKatarn Jun 8, 2026
de4cdd7
Update yarn lock
JunielKatarn Jun 9, 2026
efa43b6
Re-introduce JS Desktop integration tests (#16228)
JunielKatarn Jun 9, 2026
48d4298
Update yarn lock
JunielKatarn Jun 9, 2026
3bcb599
Add missing find-dotnet-tools
JunielKatarn Jun 9, 2026
e4e835f
Merge branch 'vs18-win25-ps7-net10-wsab-82' of github.com:jurocha-ms/…
JunielKatarn Jun 9, 2026
13d580f
Fix DynamicReaderWriterTests
JunielKatarn Jun 9, 2026
e7845d9
Update yarn lock
JunielKatarn Jun 9, 2026
2227525
Use WinRT coroutine types for UwpScriptStore
JunielKatarn Jun 9, 2026
5d3d79b
clang format
JunielKatarn Jun 9, 2026
ff1690f
prettier
JunielKatarn Jun 9, 2026
56bc26e
prettier
JunielKatarn Jun 9, 2026
da46fb9
prettier
JunielKatarn Jun 9, 2026
061ee6e
Adjust TextComponentTest.test.ts.snap
JunielKatarn Jun 10, 2026
e6ca511
Increase timeouts
JunielKatarn Jun 10, 2026
83d912b
Revert "Increase timeouts"
JunielKatarn Jun 10, 2026
ab27502
Adjust test snapshots
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/node-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ parameters:

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

jobs:
- ${{ each nodeVersion in parameters.versions }}:
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
12 changes: 12 additions & 0 deletions .ado/templates/yarn-install.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,18 @@ parameters:
- HostedImage

steps:
- 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') }}:
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