Skip to content

fix: pin unity-test-runner to v4.3.2 to fix Unity 6000.6.x builds - #4127

Open
frostebite wants to merge 4 commits into
MirrorNetworking:masterfrom
frostebite:fix/unity-6000-6-shm-size
Open

fix: pin unity-test-runner to v4.3.2 to fix Unity 6000.6.x builds#4127
frostebite wants to merge 4 commits into
MirrorNetworking:masterfrom
frostebite:fix/unity-6000-6-shm-size

Conversation

@frostebite

@frostebite frostebite commented Sep 9, 2026

Copy link
Copy Markdown

Summary

Fixes the retry-then-fail loop on the 6000.6.0f1 matrix leg of RunUnityTests.yml (reported on Discord, reproduced from this run).

The actual failure, underneath what looked like a license activation problem:

[Error] Insufficient shared memory available - if using Docker, please run the container with --shm-size=1025M
...
Aborted (core dumped)
##[warning]Activation failed, attempting retry #5
...
Unclassified error occured while trying to activate license.
Exit code was: 134

Unity 6.6+ editors request 1GiB of shared memory and hard-fail on startup (exit 134 = SIGABRT) against Docker's 64m default. unity-test-runner never passed --shm-size to the Docker run at all, so there was no workaround available. The crash happened to occur during the same editor invocation used for license activation, so it got retried 5 times as if it were a transient licensing error before giving up - hence the "retry cycle."

game-ci/[email protected] fixes this by passing --shm-size=1025m on the Docker run - same action architecture this workflow already ran, single-purpose fix, nothing else changes.

Update: a second, unrelated issue - now also fixed

After this PR was opened, floating @v4 (which had separately gained the shared-memory fix via a newer rewrite that shells out to the game-ci CLI) hit a different failure for this workflow:

[Licensing::Client] Error: Code 400 while processing request (status: Machine bindings don't match)

Root cause: this workflow provides both UNITY_LICENSE (a personal .ulf) and UNITY_EMAIL/UNITY_PASSWORD. A personal .ulf is bound to whichever machine originally requested it, so loading it directly fails on any other machine - and every CI container is a different machine. The pre-rewrite unity-test-runner (what v4.3.2 still runs) avoided this by extracting the embedded serial and activating through the Unity account instead, which works on any machine; that fallback was missing from the CLI-based rewrite. Fixed now in game-ci/cli#254, released as game-ci/cli v0.1.54.

Either option is safe now

  • Merge this PR to stay pinned to v4.3.2 (the old, long-stable action architecture) - smallest possible diff, avoids depending on the CLI-based rewrite entirely.
  • Close this PR and stay on floating @v4 unchanged - unity-test-runner always pulls the latest game-ci CLI release, so it now includes both fixes above with no workflow change needed at all.

Your call - both should be green on 6000.6.0f1 now.

Test plan

  • CI on this PR should show the 6000.6.0f1 matrix leg passing (previously the one consistently failing)

🤖 Generated with Claude Code

frostebite and others added 4 commits September 9, 2026 02:17
Unity 6.6+ editors request 1GiB of shared memory and hard-fail with
"Insufficient shared memory available - if using Docker, please run
the container with --shm-size=1025M" against Docker's 64m default -
this surfaced here as a retry-then-fail loop on the 6000.6.0f1 matrix
leg that looked like a license activation problem
(https://github.com/MirrorNetworking/Mirror/actions/runs/34241094252/job/102111159900),
but Unity itself was crashing on startup (exit 134, SIGABRT) before
licensing ever got involved.

game-ci/[email protected] passes --shm-size=1025m on the Docker
run to fix it, without any other change - same action architecture
this workflow already ran.

Note the floating @v4 tag also already resolves to a fix (a newer
thin-wrapper rewrite that shells out to game-ci/cli, which defaults to
the same 1025m), so this workflow would likely pass again even
unchanged. Pinning to v4.3.2 here instead for the smallest possible
diff from what was already running and verified stable.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Full context (root cause, both fixes, and the choice between staying
pinned vs. tracking floating @v4) belongs in the PR description /
review comments, not baked into the workflow file at this length -
every existing comment in this file is 1-3 short lines.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
A comment that says "see PR description" is a dangling reference once
this merges and the PR itself scrolls out of view - explain the why
directly instead, matching how every other comment in this file
already stands on its own.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
The PR description already carries the full why; a one-line version
pin needs no accompanying comment, and it keeps this easier to skim
and merge as-is.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
frostebite added a commit to game-ci/cli that referenced this pull request Sep 9, 2026
Supersedes the approach in #254 (v0.1.54): that release tried to
extract the serial embedded in a personal .ulf and reuse it for a
portable, account-bound serial activation. Verified correct end-to-end
against a synthetic license file (mutation, docker env var
construction, shell quoting - all directly tested), but still failed
in production against at least one real user's actual .ulf
(MirrorNetworking/Mirror#4127, "Machine bindings don't match" even
after upgrading to v0.1.54) - something about a real, current personal
.ulf's shape doesn't match closely enough for extraction to produce
something Unity's licensing client accepts, and there's no way to get
a real sample to debug further since it's a secret.

Two independent users separately arrived at the same working fix by
hand: drop the .ulf entirely and provide just the account credentials.
This replaces the extraction attempt with exactly that - whenever a
license file and full account credentials are both present and no
genuine serial was given, force --unityLicensingMethod=personal
through the existing explicit-override mechanism, the same escape
hatch a user would reach for manually. No parsing, no new per-platform
script logic, same reasoning both users already validated by hand.

Co-authored-by: Claude Sonnet 5 <[email protected]>
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