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: thomhurst/TUnit
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v1.59.0
Choose a base ref
...
head repository: thomhurst/TUnit
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: v1.60.0
Choose a head ref
  • 19 commits
  • 62 files changed
  • 2 contributors

Commits on Jul 13, 2026

  1. chore(deps): update tunit to 1.59.0 (#6398)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 13, 2026
    Configuration menu
    Copy the full SHA
    6a9ef72 View commit details
    Browse the repository at this point in the history
  2. chore(deps): update verify to 31.24.1 (#6399)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 13, 2026
    Configuration menu
    Copy the full SHA
    cc5474c View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b3ea8c8 View commit details
    Browse the repository at this point in the history
  4. chore(deps): update microsoft.testing to 2.3.2 (#6401)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 13, 2026
    Configuration menu
    Copy the full SHA
    da2a8e6 View commit details
    Browse the repository at this point in the history
  5. chore(deps): update mstest to 4.3.2 (#6402)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 13, 2026
    Configuration menu
    Copy the full SHA
    87ca576 View commit details
    Browse the repository at this point in the history

Commits on Jul 14, 2026

  1. Configuration menu
    Copy the full SHA
    c9edea5 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    b285c84 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    0766a79 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    fdd6285 View commit details
    Browse the repository at this point in the history
  5. chore(deps): update dependency microsoft.templateengine.authoring.cli…

    … to v10.0.302 (#6407)
    
    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 14, 2026
    Configuration menu
    Copy the full SHA
    3406449 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    d5012bd View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    b5e1a81 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    fb9ce3e View commit details
    Browse the repository at this point in the history
  9. chore(deps): update dependency microsoft.templateengine.authoring.tem…

    …plateverifier to 10.0.302 (#6411)
    
    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 14, 2026
    Configuration menu
    Copy the full SHA
    7ca4cca View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    72ac83c View commit details
    Browse the repository at this point in the history
  11. Configuration menu
    Copy the full SHA
    17ce39f View commit details
    Browse the repository at this point in the history
  12. Configuration menu
    Copy the full SHA
    c371f07 View commit details
    Browse the repository at this point in the history
  13. chore(deps): update dependency polyfill to v11 (#6417)

    Co-authored-by: Renovate Bot <[email protected]>
    thomhurst and renovate-bot authored Jul 14, 2026
    Configuration menu
    Copy the full SHA
    edc5d50 View commit details
    Browse the repository at this point in the history

Commits on Jul 15, 2026

  1. +semver:minor - feat: cross-process test report aggregation — merged …

    …HTML report + single GitHub summary (#6415)
    
    * feat: cross-process test report aggregation (#4522)
    
    Multiple test projects run as separate processes, producing N summary
    blocks and N HTML reports with no way to merge them. Each process now
    persists a JSON sidecar of its report data; sibling processes
    cooperatively rewrite one marker-delimited summary block and one merged
    HTML report under a file lock (last finisher leaves the complete
    aggregate). On by default where a shared directory is resolvable
    (GitHub Actions or TUNIT_AGGREGATE_DIR); TUNIT_AGGREGATE_REPORTS=off to
    disable, =defer for multi-step pipelines with the new tunit-report
    dotnet tool (TUnit.Reporting.Tool) merging at the end.
    
    * docs: cross-job and cross-run report merging recipe
    
    Full artifact-based workflow: per-job sidecar upload (defer mode),
    download-artifact with merge-multiple onto one runner, tunit-report
    merge for the combined HTML + single summary block; plus gh run
    download for combining separate workflow runs.
    
    * refactor: apply code-review cleanups to report aggregation
    
    Single lock cycle: HtmlReporter now drives sidecar write, merged HTML
    and the summary region in one env-parse/lock/scan pass, calling back
    into GitHubReporter for the region write; previously both reporters
    independently parsed env, locked and re-read every sidecar. Sidecar
    JSON serializes once to UTF-8 bytes for both copies. Shared AtomicFile
    helper replaces two swap implementations. ReportTestResult is a record
    so merging uses 'with' instead of a drift-prone manual copy. Sidecar
    reader collapses eight loops into a generic ReadArray. Tool links real
    constants via new constants-only partials (TUnitActivitySource,
    ClassTimelineAttribute) instead of value-mirroring shims; merged
    report name and summary cap live in linked files. Duration formatting
    and the failures-per-group cap are shared between the per-suite and
    aggregated summaries.
    
    * fix: harden sidecar reading against corrupt and unreadable files
    
    Review findings (Codex + Claude): GetInt32() on a non-Int32-representable
    schemaVersion threw FormatException past the catch(JsonException) guard,
    letting one corrupt sidecar kill the whole merge; the tool's per-file
    read was unguarded, so a locked or unreadable sidecar exited the tool
    with code 2 instead of counting as skipped. schemaVersion and the int
    helpers now use TryGetInt32; the tool skips unreadable files like the
    engine does.
    
    * fix: address review findings on merge fidelity and sidecar robustness
    
    Sidecar reader now treats wrong-shaped nested values (groups:[1] throws
    InvalidOperationException, not JsonException) and non-finite numeric
    literals (1e9999 parses to Infinity) as malformed input instead of
    letting them escape or poison duration math. Merged reports re-tag
    tunit.test.class span tags when class names are disambiguated, so
    per-class timelines survive multi-TFM merges. Source-control metadata
    and link templates are kept only when every suite agrees — merging
    sidecars from different commits no longer links tests to the wrong
    revision. SpanData is a record to support the retag via 'with'.
    
    * fix: tolerate inaccessible subdirectories during sidecar discovery
    
    SearchOption.AllDirectories throws mid-enumeration when a subdirectory
    is unreadable or deleted during the walk, exiting the tool before the
    per-file guard runs. EnumerationOptions with IgnoreInaccessible skips
    such directories instead.
    
    * fix: correct suite-span rename key and dedupe engine sidecar reads
    
    The class-timeline join resolves a suite span's class via
    FindTagValue(TagTestClass) ?? Name, and suite spans carry no
    TagTestClass — the collector rewrites their Name from test.suite.name.
    The previous retag targeted TagTestClass (FullName values that never
    match group names), so it was a no-op; renames now rewrite the suite
    span's Name and test.suite.name tag, matching the report's actual join
    key. Engine ReadAllSidecars also dedupes by content hash so pointing
    TUNIT_AGGREGATE_DIR at a directory that already holds the local sidecar
    (e.g. TestResults) no longer double-counts the suite.
    
    * fix: pack reporting tool with build; replace stale block on summary overflow
    
    CI failed with NETSDK1004: PackTUnitFilesModule packs --no-build, but
    TUnit.Reporting.Tool is referenced by no test module so nothing had
    restored or built it — pack now builds that one project (it isn't
    strong-named, so the no-build race the module guards against doesn't
    apply). Also, when a later aggregate exceeds GitHub's 1MB summary cap,
    the previously written partial block is swapped for a short overflow
    notice instead of being left standing and misreporting which suites
    ran (review finding).
    thomhurst authored Jul 15, 2026
    Configuration menu
    Copy the full SHA
    27a6d77 View commit details
    Browse the repository at this point in the history
Loading