Skip to content

Run LibChorus hg-integration tests in parallel with logic tests on Windows#386

Draft
imnasnainaec wants to merge 2 commits into
masterfrom
perf/libchorus-test-split
Draft

Run LibChorus hg-integration tests in parallel with logic tests on Windows#386
imnasnainaec wants to merge 2 commits into
masterfrom
perf/libchorus-test-split

Conversation

@imnasnainaec

@imnasnainaec imnasnainaec commented Jun 22, 2026

Copy link
Copy Markdown
Contributor

Problem

The `build-and-test` job on Windows takes ~57 minutes because the LibChorus test run serially spawns ~1,822 `hg.exe` processes across ~988 tests. The two hg-heavy namespaces are:

  • `LibChorus.Tests.VcsDrivers` (~184 tests)
  • `LibChorus.Tests.sync` (~84 tests)

The remaining ~665 tests are pure XML-diff logic and are fast. Running them all in one serial job means the fast logic tests wait behind the slow Mercurial I/O.

Approach

Add a `libchorus-split` matrix dimension to the existing `build-and-test` job. Four extra Windows-only `include` entries inject `libchorus-split: vcs` and `libchorus-split: sync` jobs that run in parallel with the normal `libchorus-split: ''` jobs — no changes to source code or test projects required.

Matrix layout after this change (Windows):

framework libchorus-split what runs
net462 `` (empty) Chorus, ChorusHub, ChorusMerge, LibChorus remaining
net8.0 `` (empty) ChorusMerge, LibChorus remaining
net462 `vcs` LibChorus VcsDrivers only
net8.0 `vcs` LibChorus VcsDrivers only
net462 `sync` LibChorus sync only
net8.0 `sync` LibChorus sync only

Linux is unaffected — it still runs the full LibChorus suite in the single existing entry (no `vcs`/`sync` include entries are injected for Linux).

Filter expressions used

VcsDrivers job:
```
TestCategory!=SkipOnBuildServer&FullyQualifiedName~LibChorus.Tests.VcsDrivers
```

sync job:
```
TestCategory!=SkipOnBuildServer&FullyQualifiedName~LibChorus.Tests.sync
```

Remaining logic job (Windows):
```
TestCategory!=SkipOnBuildServer&FullyQualifiedName!~LibChorus.Tests.VcsDrivers&FullyQualifiedName!~LibChorus.Tests.sync
```

Estimated impact

Each hg-heavy slice (~184 and ~84 tests respectively) runs in parallel with each other and with the logic slice. The logic slice (~665 tests, no hg) should finish in ~7 min. Running in parallel, the critical path drops from ~57 min to roughly ~30 min on Windows.

Step guards

Steps skipped in the `vcs` and `sync` jobs to avoid wasted time: Test Chorus, Test Chorus Hub, Test ChorusMerge. The Restore, Build, and Upload Test Results steps still run in all job instances.

Devin review

https://app.devin.ai/review/sillsdev/chorus/pull/386


This change is Reviewable

imnasnainaec and others added 2 commits June 22, 2026 15:48
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Split libchorus-split: hg into vcs (VcsDrivers) and sync separately
  so all three groups run in parallel on Windows
- net462 include entries now appear before net8.0 in the matrix
- Remove redundant ubuntu guard (ubuntu never gets vcs/sync entries)
- Replace != '' guards with == '' for clarity
- Rename "merge, FileHandlers, utilities, Model" step to "remaining"

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Test Results

     12 files  +       4     333 suites  ±0   2h 30m 52s ⏱️ - 6m 49s
   991 tests ±       0     935 ✔️ +       1    56 💤 ±0  0  - 1 
7 206 runs  +4 052  7 083 ✔️ +4 053  123 💤 ±0  0  - 1 

Results for commit f39e360. ± Comparison against base commit 363c8d1.

@imnasnainaec imnasnainaec self-assigned this Jun 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant