Skip to content

fix: Improvements on MSRC CLI #285

fix: Improvements on MSRC CLI

fix: Improvements on MSRC CLI #285

Workflow file for this run

name: Perf Tests
# Triggers on PRs touching source that could affect perf,
# and on pushes to main/stable for baseline updates.
on:
pull_request:
branches: [main, '*-stable']
paths:
- 'vnext/**'
- 'packages/**'
- 'vnext/Scripts/perf/**'
- '.github/workflows/perf-tests.yml'
push:
branches: [main]
paths:
- 'packages/e2e-test-app-fabric/test/__perf__/**'
# Allow manual trigger for debugging
workflow_dispatch:
# Cancel in-progress runs for the same PR
concurrency:
group: perf-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
jobs:
perf-tests:
name: Component Performance Tests
runs-on: windows-latest
timeout-minutes: 60
permissions:
contents: read
actions: read
steps:
# ── Setup ──────────────────────────────────────────────
- name: Checkout head (PR)
uses: actions/checkout@v4
with:
fetch-depth: 0 # Need history for baseline comparison
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 22
- name: Install dependencies
run: yarn install --immutable
- name: Detect preinstalled Windows SDK
id: winsdk
shell: pwsh
run: |
# Find the latest SDK version already installed on the runner
$sdkRoot = "${env:ProgramFiles(x86)}\Windows Kits\10\Include"
$versions = Get-ChildItem $sdkRoot -Directory | Where-Object { $_.Name -match '^\d+\.\d+\.\d+\.\d+$' } | Sort-Object { [version]$_.Name } -Descending
if ($versions.Count -eq 0) {
echo "::error::No Windows SDK found on runner"
exit 1
}
$sdk = $versions[0].Name
echo "version=$sdk" >> $env:GITHUB_OUTPUT
echo "::notice::Using preinstalled Windows SDK $sdk"
- name: Build perf-testing package
run: yarn workspace @react-native-windows/perf-testing build
# ── Build & Deploy RNTesterApp-Fabric (for native perf tests) ──
- name: Build and deploy RNTesterApp-Fabric
working-directory: packages/e2e-test-app-fabric
run: yarn windows --release --no-launch --logging --msbuildprops WindowsTargetPlatformVersion=${{ steps.winsdk.outputs.version }}
# ── Run Tests ──────────────────────────────────────────
- name: Run perf tests
id: perf-run
working-directory: packages/e2e-test-app-fabric
env:
CI: 'true'
RN_TARGET_PLATFORM: windows
run: yarn perf:ci
continue-on-error: true # Don't fail here — let comparison decide
- name: Run native perf tests
id: native-perf-run
working-directory: packages/e2e-test-app-fabric
env:
CI: 'true'
RN_TARGET_PLATFORM: windows
run: yarn perf:native:ci
continue-on-error: true
# ── Compare & Report ───────────────────────────────────
- name: Compare against baselines
id: compare
working-directory: packages/e2e-test-app-fabric
run: yarn perf:ci:compare
continue-on-error: true
- name: Save PR number
if: github.event_name == 'pull_request'
run: echo "${{ github.event.pull_request.number }}" > packages/e2e-test-app-fabric/.perf-results/pr-number.txt
- name: Upload perf results
if: always()
uses: actions/upload-artifact@v4
with:
name: perf-results
include-hidden-files: true
path: |
packages/e2e-test-app-fabric/.perf-results/
packages/e2e-test-app-fabric/.native-perf-results/
packages/e2e-test-app-fabric/test/__perf__/**/__perf_snapshots__/
packages/e2e-test-app-fabric/test/__native_perf__/**/__perf_snapshots__/
retention-days: 30
# ── Status Gate ────────────────────────────────────────
- name: Check for regressions
if: steps.compare.outcome == 'failure'
run: |
echo "::error::Performance regressions detected. See PR comment for details."
exit 1