Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
100 changes: 98 additions & 2 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,112 @@ steps:
script: yarn tsc | yarn lint

- task: CmdLine@2
displayName: Build project (Debug)
displayName: Build project (Release)
timeoutInMinutes: 60
inputs:
script: npx react-native run-windows --arch x64 --no-deploy --logging --buildLogDirectory $BuildLogDirectory\Debug
script: npx react-native run-windows --arch x64 --no-deploy --logging --release --buildLogDirectory $BuildLogDirectory\Debug

- task: CmdLine@2
displayName: Snapshot Tests
inputs:
script: yarn test

- task: MSBuild@1
displayName: Build AccessibilityUnitTest
inputs:
solution: windows\AccessibilityUnitTest\AccessibilityUnitTest.csproj
configuration: Debug
platform: AnyCPU
msbuildArguments: /restore

- task: CmdLine@2
displayName: Deploy App
timeoutInMinutes: 5
inputs:
script: npx react-native run-windows --arch x64 --no-build --no-launch --release

- task: PowerShell@2
displayName: Launch App from Start Menu
inputs:
targetType: inline
script: |
Start-Process "shell:AppsFolder\Microsoft.ReactNativeGallery_8wekyb3d8bbwe!App"
Start-Sleep -Seconds 10

$process = Get-Process -Name "rngallery" -ErrorAction SilentlyContinue
if ($process) {
Write-Host "App is running (PID: $($process.Id))"
} else {
Write-Error "App failed to start"
}

- task: PowerShell@2
displayName: Save Baseline Accessibility Snapshot
inputs:
targetType: inline
script: |
Copy-Item "windows\AccessibilityUnitTest\AccessibilitySnapshot.json" "$(Build.ArtifactStagingDirectory)\AccessibilitySnapshot.baseline.json"
Write-Host "Baseline snapshot saved"

- task: VSTest@2
displayName: Run Accessibility Tests
inputs:
testSelector: testAssemblies
testAssemblyVer2: |
**\bin\Debug\AccessibilityUnitTest.dll
searchFolder: $(System.DefaultWorkingDirectory)\windows\AccessibilityUnitTest
resultsFolder: $(Build.ArtifactStagingDirectory)\TestResults

- task: PowerShell@2
displayName: Validate Accessibility Snapshot
condition: succeededOrFailed()
inputs:
targetType: inline
script: |
$baselinePath = "$(Build.ArtifactStagingDirectory)\AccessibilitySnapshot.baseline.json"
$currentPath = "windows\AccessibilityUnitTest\AccessibilitySnapshot.json"

if (-not (Test-Path $currentPath)) {
Write-Host "##[error]Accessibility snapshot was not generated by the test run."
exit 1
}

# Sort results by TestName for stable comparison
function Normalize-Snapshot($path) {
$json = Get-Content $path -Raw | ConvertFrom-Json
$json.Results = @($json.Results | Sort-Object TestName)
return ($json | ConvertTo-Json -Depth 10)
}

$baselineNorm = Normalize-Snapshot $baselinePath
$currentNorm = Normalize-Snapshot $currentPath

if ($baselineNorm -eq $currentNorm) {
Write-Host "Accessibility snapshot matches baseline."
} else {
Write-Host "##[error]Accessibility snapshot does not match the baseline in the repo."
Write-Host "##[section]Baseline:"
Write-Host $baselineNorm
Write-Host "##[section]Current:"
Write-Host $currentNorm
Write-Host "##[error]Update AccessibilitySnapshot.json if the changes are intentional."
exit 1
}

- task: PublishBuildArtifacts@1
displayName: Upload Accessibility Scan Results
condition: succeededOrFailed()
inputs:
pathtoPublish: windows\AccessibilityUnitTest\ScanResults
artifactName: 'Accessibility Scan Results - $(Agent.JobName)-$(System.JobAttempt)'

- task: PublishBuildArtifacts@1
displayName: Upload Accessibility Snapshot
condition: succeededOrFailed()
inputs:
pathtoPublish: windows\AccessibilityUnitTest\AccessibilitySnapshot.json
artifactName: 'Accessibility Snapshot - $(Agent.JobName)-$(System.JobAttempt)'

- task: PublishBuildArtifacts@1
displayName: Upload build logs
condition: succeededOrFailed()
Expand Down
101 changes: 101 additions & 0 deletions ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,107 @@ steps:
inputs:
script: del /f .\windows\rngallery\rngallery_Key.pfx

- task: MSBuild@1
displayName: Build AccessibilityUnitTest
condition: eq(variables['PUBLISH_APP'], 'true')
inputs:
solution: windows\AccessibilityUnitTest\AccessibilityUnitTest.csproj
configuration: Release
platform: AnyCPU
msbuildArguments: /restore

- task: CmdLine@2
displayName: Deploy App
condition: eq(variables['PUBLISH_APP'], 'true')
timeoutInMinutes: 5
inputs:
script: npx react-native run-windows --arch x64 --no-build --no-launch --release

- task: PowerShell@2
displayName: Launch App from Start Menu
condition: eq(variables['PUBLISH_APP'], 'true')
inputs:
targetType: inline
script: |
Start-Process "shell:AppsFolder\Microsoft.ReactNativeGallery_8wekyb3d8bbwe!App"
Start-Sleep -Seconds 10

$process = Get-Process -Name "rngallery" -ErrorAction SilentlyContinue
if ($process) {
Write-Host "App is running (PID: $($process.Id))"
} else {
Write-Error "App failed to start"
}

- task: PowerShell@2
displayName: Save Baseline Accessibility Snapshot
condition: eq(variables['PUBLISH_APP'], 'true')
inputs:
targetType: inline
script: |
Copy-Item "windows\AccessibilityUnitTest\AccessibilitySnapshot.json" "$(Build.ArtifactStagingDirectory)\AccessibilitySnapshot.baseline.json"
Write-Host "Baseline snapshot saved"

- task: VSTest@2
displayName: Run Accessibility Tests
condition: eq(variables['PUBLISH_APP'], 'true')
inputs:
testSelector: testAssemblies
testAssemblyVer2: |
**\bin\Release\AccessibilityUnitTest.dll
searchFolder: $(System.DefaultWorkingDirectory)\windows\AccessibilityUnitTest
resultsFolder: $(Build.ArtifactStagingDirectory)\TestResults

- task: PowerShell@2
displayName: Validate Accessibility Snapshot
condition: and(succeededOrFailed(), eq(variables['PUBLISH_APP'], 'true'))
inputs:
targetType: inline
script: |
$baselinePath = "$(Build.ArtifactStagingDirectory)\AccessibilitySnapshot.baseline.json"
$currentPath = "windows\AccessibilityUnitTest\AccessibilitySnapshot.json"

if (-not (Test-Path $currentPath)) {
Write-Host "##[error]Accessibility snapshot was not generated by the test run."
exit 1
}

# Sort results by TestName for stable comparison
function Normalize-Snapshot($path) {
$json = Get-Content $path -Raw | ConvertFrom-Json
$json.Results = @($json.Results | Sort-Object TestName)
return ($json | ConvertTo-Json -Depth 10)
}

$baselineNorm = Normalize-Snapshot $baselinePath
$currentNorm = Normalize-Snapshot $currentPath

if ($baselineNorm -eq $currentNorm) {
Write-Host "Accessibility snapshot matches baseline."
} else {
Write-Host "##[error]Accessibility snapshot does not match the baseline in the repo."
Write-Host "##[section]Baseline:"
Write-Host $baselineNorm
Write-Host "##[section]Current:"
Write-Host $currentNorm
Write-Host "##[error]Update AccessibilitySnapshot.json if the changes are intentional."
exit 1
}

- task: PublishBuildArtifacts@1
displayName: Upload Accessibility Scan Results
condition: and(succeededOrFailed(), eq(variables['PUBLISH_APP'], 'true'))
inputs:
pathtoPublish: windows\AccessibilityUnitTest\ScanResults
artifactName: 'Accessibility Scan Results - $(Agent.JobName)-$(System.JobAttempt)'

- task: PublishBuildArtifacts@1
displayName: Upload Accessibility Snapshot
condition: and(succeededOrFailed(), eq(variables['PUBLISH_APP'], 'true'))
inputs:
pathtoPublish: windows\AccessibilityUnitTest\AccessibilitySnapshot.json
artifactName: 'Accessibility Snapshot - $(Agent.JobName)-$(System.JobAttempt)'

- task: PublishBuildArtifacts@1
displayName: Upload App
condition: and(succeededOrFailed(), eq(${{ matrix.reactNativeWindowsVersion }}, "current"))
Expand Down
6 changes: 6 additions & 0 deletions windows/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,9 @@ Ankh.NoLoad
*.binlog
*.err
*.wrn

# Accessibility scan results
AccessibilityUnitTest/ScanResults/

# NuGet packages
packages/
Loading