From 3dd1af5ec17816cf8528997d10da9b2de08d5b1f Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 19 Aug 2026 15:43:41 +0200 Subject: [PATCH] ci: run Core.Net single-threaded on Linux, as its own step MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Push 2 went red on a SIXTH member of the load-sensitive family (PrunedId_RejectAtFreshSequence_ReclaimKeepsTheStreamAligned), with the assembly taking 59 s on Linux against ~7 s on Windows. Laning members one at a time was the pattern that already failed to converge, so this addresses the assembly instead. The split is measured, not defensive: on this 6-core container Core.Net FAILS in 40 s with default parallelism and PASSES in 10 s single-threaded. Its sessions do real socket work on background threads, so contention both breaks and slows them. Windows keeps default parallelism — 18 cores, ~7 s, and it REGRESSED when the same assembly was serialized there. An earlier attempt passed the flag through a bash array inside the shared loop and never reached dotnet. This gives the project its own explicit invocation so the flag cannot be swallowed. --- .gitea/workflows/ci.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 025b5533..a2437596 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -65,10 +65,23 @@ jobs: run: | set -e dotnet --version + # Core.Net runs SINGLE-THREADED here, on its own, and the split is + # measured rather than defensive: on this 6-core container the + # assembly FAILS in 40 s with default parallelism and PASSES in 10 s + # with one thread. Its sessions do real socket work on background + # threads, so contention both breaks and slows them. Windows has 18 + # cores, passes in ~7 s parallel, and REGRESSED when serialized, so + # this stays scoped to Linux. + echo '::group::AcDream.Core.Net.Tests (single-threaded)' + dotnet test tests/AcDream.Core.Net.Tests/AcDream.Core.Net.Tests.csproj \ + -c Release --nologo \ + --filter 'Lane!=InstalledDat&Lane!=PreparedPackage&Lane!=Live&Lane!=Manual&Lane!=Timing&Lane!=Windows&Lane!=SystemFont&Purpose!=Diagnostic&Status!=KnownFailure' \ + -- xUnit.MaxParallelThreads=1 + echo '::endgroup::' + for p in \ tests/AcDream.Platform.Tests \ tests/AcDream.Core.Tests \ - tests/AcDream.Core.Net.Tests \ tests/AcDream.Content.Tests \ tests/AcDream.Runtime.Tests \ tests/AcDream.Headless.Tests \