Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: dotnet/xharness
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 0eeaa60169
Choose a base ref
...
head repository: dotnet/xharness
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: b0c8bf6dba
Choose a head ref
  • 16 commits
  • 63 files changed
  • 9 contributors

Commits on Mar 10, 2026

  1. Fix tvOS device communication failures causing false TIMED_OUT and AP…

    …P_CRASH after successful runs (#1551)
    
    * Initial plan
    
    * Fix tvOS device communication failures causing false TIMED_OUT and APP_CRASH results
    
    Three layered fixes:
    
    1. DeviceLogCapturer: Add 2-minute timeouts to 'log collect' and 'log show' processes
       in StopCapture() to prevent indefinite blocking when Apple TV device log streaming
       is broken (fixes apple run TIMED_OUT after mlaunch exits with expected code).
    
    2. ResultFileHandler: Add retry with backoff (up to 3 attempts, 5s/10s/20s delays)
       to devicectl file copy in CopyResultsAsync() to handle transient device communication
       errors (com.apple.Mercury.error 1000, RSD error 0xE8000003).
    
    3. TestReporter.ParseResult(): When Success=true was already set by CollectDeviceResult()
       (test run completed via app end signal), but the results file is missing (devicectl
       failed), return Succeeded instead of Crashed. Device communication failure after
       successful test completion is an infrastructure issue, not an app crash.
    
    4. AppTester: Skip crash report retrieval when test run already completed and file copy
       fails, replacing misleading 'app may have crashed' message with accurate warning.
    
    Adds unit tests for retry behavior and the new TestReporter.ParseResult() path.
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    * Improve test method naming per code review feedback
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    * Remove accidentally committed .nuget/nuget.exe binary and add to .gitignore
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    * Address PR review feedback
    
    - DeviceLogCapturer: Add WaitForExit() flush after timed WaitForExit() to ensure
      async stdout/stderr buffers are fully drained before reading them (both log collect
      and log show processes).
    - DeviceLogCapturer: Fix _outputPath cleanup on early-return paths (timeout and
      non-zero exit) by extracting CleanupOutputPath() helper and calling it uniformly.
    - ResultFileHandler: Make DefaultRetryDelaysMs private (tests inject via constructor);
      clone the array on assignment to prevent external mutation.
    - Integration tests: Update osx.13.amd64.open Helix queue to osx.15.amd64.open.
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    Copilot and steveisok authored Mar 10, 2026
    Configuration menu
    Copy the full SHA
    a6f9fe6 View commit details
    Browse the repository at this point in the history
  2. Android: Attempt emulator recovery before returning DEVICE_NOT_FOUND (#…

    …1550)
    
    * Initial plan
    
    * Add emulator recovery to AdbRunner and update Android commands to attempt recovery before DEVICE_NOT_FOUND
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    * Android: Attempt emulator recovery before returning DEVICE_NOT_FOUND
    
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
    Co-authored-by: steveisok <471438+steveisok@users.noreply.github.com>
    Copilot and steveisok authored Mar 10, 2026
    Configuration menu
    Copy the full SHA
    e7a795d View commit details
    Browse the repository at this point in the history
  3. Update Simulator.Commands Helix queue from osx.13 to osx.15 (#1545)

    * Update Simulator.Commands Helix queue from osx.13 to osx.15
    
    The Simulator.Commands.Tests.proj was using osx.13.amd64.open (macOS Ventura 13)
    which is the oldest queue. Update to osx.15.amd64.open to align with the other
    Apple simulator test projects and dotnet/runtime.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Update iOS simulator version to 18.1 for osx.15 queue
    
    The osx.15 machines have iOS 18.1 pre-installed. The old 16.4 version
    required downloading a 6.18 GB simulator runtime, causing timeouts.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Use architecture-specific test app bundle for simulator commands test
    
    The non-architecture-specific app bundle (from June 2025) fails to launch
    on iOS 18.1 simulators. Update the download URL to use the x64-specific
    path which has a newer app bundle (December 2025) that is compatible.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Use 'apple test' instead of 'install + just-test' in Simulator Commands E2E test
    
    The manual 'install' + 'just-test' flow has a systematic failure on iOS 18.1
    simulators (APP_LAUNCH_FAILURE). The 'apple test' command, which handles the
    full lifecycle internally, works correctly on the same platform. This change
    replaces the failing flow while still exercising 5 manual commands:
    simulators install, reset-simulator, device, test (with --device), and uninstall.
    
    The 'just-test' failure on iOS 18.1 should be investigated separately.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Don't fail test on uninstall after 'apple test' cleanup
    
    The 'apple test' command shuts down the simulator during cleanup,
    which causes the subsequent 'apple uninstall' to fail with
    PACKAGE_NOT_FOUND. The uninstall is still executed to exercise
    the command, but its exit code no longer affects the test result.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    vitek-karas and Copilot authored Mar 10, 2026
    Configuration menu
    Copy the full SHA
    c32a777 View commit details
    Browse the repository at this point in the history

Commits on Mar 11, 2026

  1. Update .NET SDK to 10.0.103 to address security vulnerabilities (#1542)

    Upgrade from 10.0.100 to 10.0.103 as recommended by Component Governance
    alert 12328124. See https://aka.ms/dotnet-security-notes for details.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    vitek-karas and Copilot authored Mar 11, 2026
    Configuration menu
    Copy the full SHA
    2856c8a View commit details
    Browse the repository at this point in the history
  2. Switch E2E test pool from ubuntu-latest to DncEng public pool (#1556)

    Use DncEngPublicBuildPool with build.ubuntu.2204.amd64.open image
    instead of the ubuntu-latest hosted pool for E2E test jobs. This
    ensures hosted pools are only used for macOS runs.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    kotlarmilos and Copilot authored Mar 11, 2026
    Configuration menu
    Copy the full SHA
    2ceb56d View commit details
    Browse the repository at this point in the history

Commits on Mar 12, 2026

  1. Fix CA2024 in TestReporter (#1555)

    Avoid StreamReader.EndOfStream in the async run-log parser.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    vitek-karas and Copilot authored Mar 12, 2026
    Configuration menu
    Copy the full SHA
    ea007a3 View commit details
    Browse the repository at this point in the history
  2. Enable NativeAOT support for iOS test runner (#1554)

    Make ThreadlessXunitTestRunner platform-generic so it can be used on
    iOS/tvOS/Mac Catalyst in addition to WASM. The runner uses reflection-based
    test discovery (ThreadlessXunitDiscoverer) which is NativeAOT-compatible,
    unlike XUnitTestRunner which depends on XunitFrontController for dynamic
    assembly loading.
    
    Changes:
    - ThreadlessXunitTestRunner: make ResultsFileName settable, refactor
      WriteResultsToFile to support file-based XML output on non-browser
      platforms while preserving existing WASM behavior
    - iOSApplicationEntryPoint: detect NativeAOT via
      RuntimeFeature.IsDynamicCodeSupported and automatically use
      ThreadlessXunitTestRunner when dynamic code is not available
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    kotlarmilos and Copilot authored Mar 12, 2026
    Configuration menu
    Copy the full SHA
    8fc29af View commit details
    Browse the repository at this point in the history
  3. [main] Update dependencies from dotnet/arcade (#1530)

    [main] Update dependencies from dotnet/arcade
    
    
     - Fix CA2024: Do not use StreamReader.EndOfStream in async methods
    
    Implement the recommendation from https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca2024
    
     - Merge branch 'main' into darc-main-d6137969-a1fd-4d9c-b794-faea8b997496
    
     - Merge main and update .NET SDK to 11.0.100-preview.2.26159.112
    
    Merge latest main into the Arcade update PR branch and resolve the
    global.json conflict by upgrading the .NET SDK to Preview 2
    (11.0.100-preview.2.26159.112). The previous SDK version
    (11.0.100-preview.1.26104.118) has a known bug (dotnet/sdk#53101)
    where dotnet tool install fails with 'DotnetToolSettings.xml not found',
    breaking all Helix E2E tests.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
     - Update integration test Helix tool settings
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    dotnet-maestro[bot] and Copilot authored Mar 12, 2026
    Configuration menu
    Copy the full SHA
    04cea5f View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    391c863 View commit details
    Browse the repository at this point in the history

Commits on Mar 15, 2026

  1. Fix Chrome DevToolsActivePort crash retry for Selenium 4.0.0-alpha05 (#…

    …1563)
    
    The retry logic in GetChromiumDriver only catches TargetInvocationException
    when the inner exception is WebDriverException. However, Selenium
    4.0.0-alpha05 throws InvalidOperationException (not WebDriverException)
    for 'session not created: Chrome failed to start: crashed' errors that
    include 'DevToolsActivePort file doesn't exist'.
    
    This means the retry never fires for this common transient failure,
    causing intermittent test failures across CI (dotnet/runtime#124438).
    
    Changes:
    - Broaden catch to also match InvalidOperationException inner exceptions
    - Add 'DevToolsActivePort file doesn't exist' to retryable error snippets
    - Detect Windows containers via DOTNET_RUNNING_IN_CONTAINER env var
      for --no-sandbox (/.dockerenv only exists on Linux)
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    lewing and Copilot authored Mar 15, 2026
    Configuration menu
    Copy the full SHA
    7eea15a View commit details
    Browse the repository at this point in the history
  2. Fix artifact upload collision between Debug and Release matrix legs (#…

    …1564)
    
    Both Debug and Release matrix legs call CIBuild which includes -publish,
    causing both to simultaneously upload PackageArtifacts (e.g.
    Microsoft.DotNet.XHarness.CLI.nupkg) to the same AzDO artifact container.
    This results in intermittent 'Blob is incomplete (missing block)' errors.
    
    Fix by passing /p:Publish=false for the Debug leg so only the Release
    leg publishes packages to artifact storage. The Debug leg still builds,
    tests, signs, and packs -- it just skips the artifact upload step.
    
    Ref: dotnet/dnceng#1916
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    lewing and Copilot authored Mar 15, 2026
    Configuration menu
    Copy the full SHA
    6fe0045 View commit details
    Browse the repository at this point in the history

Commits on Mar 16, 2026

  1. Configuration menu
    Copy the full SHA
    581c6a9 View commit details
    Browse the repository at this point in the history

Commits on Mar 17, 2026

  1. Reduce mlaunch default verbosity from 5 to 2 (#1561)

    * Reduce mlaunch default verbosity from 5 to 2
    
    The default verbosity of 5 causes mlaunch to pass five -v flags to
    devicectl, producing massive debug output (full device property trees,
    connection details, capabilities) that clutters console logs. Reducing
    to 2 keeps useful diagnostic info while removing the noise.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Reduce logging verbosity by filtering out system logs in TestOrchestrator and adding a separate process log in AppBundleInformationParser.
    
    * Reduce logging verbosity in MlaunchProcessManager and IMlaunchProcessManager by setting default verbosity to 0
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    kotlarmilos and Copilot authored Mar 17, 2026
    Configuration menu
    Copy the full SHA
    09774ba View commit details
    Browse the repository at this point in the history
  2. Add NativeAOT xunit test runner with threaded execution (#1560)

    * Add NativeAOT xunit test runner with threaded execution
    
    Introduce NativeAotXunitTestRunner that extends ThreadlessXunitTestRunner
    with parallel test execution support and file-based result output.
    ThreadlessXunitTestRunner uses reflection-based discovery (NativeAOT-safe)
    but forces single-threaded execution. The new runner overrides the
    configuration to allow parallel test collections since NativeAOT has
    threads available.
    
    - Add NativeAotXunitTestRunner extending ThreadlessXunitTestRunner with
      configurable MaxParallelThreads and ParallelizeTestCollections
    - Extract virtual CreateConfiguration() and RunnerDisplayName from
      ThreadlessXunitTestRunner for extensibility
    - Revert PR #1554 changes to ThreadlessXunitTestRunner, keeping it
      WASM-only as originally intended
    - Update iOS and Android entry points to use NativeAotXunitTestRunner
      when RuntimeFeature.IsDynamicCodeSupported is false
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    * Refactor: extract CustomXunitTestRunner abstract base, rename to ReflectionBasedXunitTestRunner
    
    Address review feedback:
    - Rename NativeAotXunitTestRunner to ReflectionBasedXunitTestRunner
    - Extract shared reflection-based discovery logic into abstract
      CustomXunitTestRunner base class
    - Make ThreadlessXunitTestRunner and ReflectionBasedXunitTestRunner
      concrete implementations of CustomXunitTestRunner
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    
    ---------
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    kotlarmilos and Copilot authored Mar 17, 2026
    Configuration menu
    Copy the full SHA
    f3b160f View commit details
    Browse the repository at this point in the history

Commits on Mar 18, 2026

  1. Add net8.0 and net9.0 TFMs to all shipped packages for servicing bran…

    …ch compatibility (#1572)
    
    Define XHarnessNetTFMs centrally in Directory.Build.props so all shipped
    packages include net8.0 through net11.0. This ensures downstream repos on
    older .NET SDKs (e.g. dotnet/runtime release/8.0-staging, release/10.0) can
    consume XHarness packages from main.
    
    The Arcade SDK 11.0 defines NetMinimum=net10.0 and NetPrevious='' (empty),
    so projects using only Arcade variables end up with just net10.0 and net11.0.
    
    Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
    kotlarmilos and Copilot authored Mar 18, 2026
    Configuration menu
    Copy the full SHA
    607b3de View commit details
    Browse the repository at this point in the history

Commits on Mar 19, 2026

  1. Update dependencies from https://github.com/dotnet/arcade build 20260…

    …313.2 (#1566)
    
    On relative base path root
    Microsoft.DotNet.Arcade.Sdk , Microsoft.DotNet.Helix.Sdk From Version 11.0.0-beta.26156.2 -> To Version 11.0.0-beta.26163.2
    
    Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
    dotnet-maestro[bot] and dotnet-maestro[bot] authored Mar 19, 2026
    Configuration menu
    Copy the full SHA
    b0c8bf6 View commit details
    Browse the repository at this point in the history
Loading