Skip to content

[fork test] CI-0: get development green - #1

Merged
Cadacious merged 2 commits into
developmentfrom
ci/green-and-fast
Oct 5, 2026
Merged

Cadacious merged 2 commits into
developmentfrom
ci/green-and-fast

Conversation

@Cadacious

Copy link
Copy Markdown

Fork-internal test PR for InfiniteRasa#132 CI-0. Not for merge upstream from here; the upstream PR will be opened from this branch once CI is green.

🤖 Generated with Claude Code

https://claude.ai/code/session_012rNg9gkomRvRWZ23oM7NVX

Cadacious and others added 2 commits October 4, 2026 21:57
- LoginPacket.Read rejects trailing bytes (EnsureFullyConsumed), which
  AuthLoginRejectsTrailingBytes has expected since InfiniteRasa#96.
- MissionReviewFindingTests builds its paths with Path.Combine, so it
  finds the files on the Linux runner.
- Tests read each navmesh once per process (TestNavMeshes) and give
  every harness its own NavMeshQuery over the shared, read-only mesh,
  instead of reading a fresh 15 MB Wilderness mesh per harness. The
  whole suite in one process now peaks at ~1.4 GB, down from 12 GB+
  and climbing.
- ForeanEscortsCanFollowFromTheCaveExitToTheReclaimedBase is
  quarantined: creature timers run on Environment.TickCount64, so the
  test fails on a loaded runner and in class order on Windows. It
  needs a clock seam.

Refs InfiniteRasa#132.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rNg9gkomRvRWZ23oM7NVX
…/2/3)

The suite takes ~56 minutes in one process on a hosted runner. It now
runs in 16 test processes, 2 on each of 8 runners, in ~7 minutes once
the runners start.

- build: restores (NuGet cache restored on every run, saved only from
  development: CI-3), builds once, plans the lanes and hands the test
  build to the runners as one artifact.
- .github/scripts/TestShards.cs finds the tests in the built assembly
  and deals them out slowest first, on durations averaged over the last
  3 green runs (test case counts when there are none). Classes bigger
  than half a lane are split by method, so MissionDialogueTests no
  longer sets the run's length. The last lane runs everything the
  others don't list, so a test the planner misses still runs once.
- test (runner N): 2 lanes side by side, each its own test host, with
  a 10-minute hang dump, a GC heap cap so an overgrown host fails with
  a stack trace instead of losing the runner, and TRX results uploaded.
- tests complete: the one check to require. It totals every lane's
  results and fails unless the build and every runner passed; a PR that
  changes only docs skips the build and tests and still passes it
  (CI-2; job conditions, not paths-ignore).
- ubuntu-24.04, a timeout on every job, checkout v7, setup-dotnet v6,
  a read-only token by default, and a new push to a PR cancels its
  older run (CI-0, CI-1).

Why 8 x 2: a 4-vCPU runner behaves like ~2 cores. Measured, 2 lanes
per runner slow each test ~1.1x, 3 lanes ~1.4x, 4 lanes ~1.8x. 8 x 2
is the fastest, keeps clock-sensitive tests near their unloaded speed,
and its 11 jobs fit the Free plan's 20 concurrent jobs.

Refs InfiniteRasa#132.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012rNg9gkomRvRWZ23oM7NVX
@Cadacious
Cadacious merged commit e61c19a into development Oct 5, 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