ci: probe whether a license return succeeds in the same container - #275
Merged
Merged
Conversation
Reported in Discord: "we spend an extra 2-3m at the end of the test
action trying to return a license, which will fail every time."
Reproduced in this repo's own licensing capability matrix, which had been
emitting the identical warning unnoticed on every serial cell:
[Licensing::Module] Error: Access token is unavailable; failed to update
[Licensing::Module] Error: Failed to return entitlement license
[Licensing::Client] An error occurred attempting to return the ULF
license (status code: 1400, message: "Machine bindings don't match")
License return failed with a known-transient licensing error (attempt 1/4)
A machine-binding mismatch on return is permanent for the same reason it
is on activation: the entitlement is bound to the machine that activated
it. It was being retried because the same failing return also emits
"Access token is unavailable", which IS in the transient list - so the
real reason was masked and all four attempts burned, 20+40+80s of backoff
before warning anyway. Exactly the shape of the activation-side bug fixed
in #264.
Two changes, both applied to all four return scripts:
- A permanent-failure guard breaks out immediately, so the step ends in
seconds instead of ~2.5 minutes.
- The warning names the actual cause. "This seat may still be held by
Unity's license server" sends people hunting a leak on their Unity
account, when in fact the licence was bound to a machine that no longer
exists. It now says so, and says no action is needed.
Confirmed by machine id, in one matrix job: activation reported
I+Yk5/H/JFuzwWwFQp3B6Yo46d4= and all four return attempts reported
BvJyyTlQnbSn3y+BZ6WqttLX5wM=. That particular split is specific to the
matrix, which runs `activate` and `return-license` as separate commands
and therefore separate containers; a normal build sources both in one
container via runsteps.sh. The retry-burn and the misleading warning are
not specific to it.
Three tests, all verified to fail with the guard disabled. The editor
stub now honours STUB_OUTPUT, since the return paths drive the editor
rather than the licensing client, and this case defines its own stub
because earlier cases redefine the shared one.
Suites: 67 bash, 34 PowerShell.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The capability matrix runs `activate` and `return-license` as separate commands, so they get separate containers with separate machine identities, and the return always fails on a binding mismatch. A normal build sources both in one container via runsteps.sh, so it should not - but that was never measured, and a user reports the return failing every time in a normal build. Adds a serial activate-then-return pair inside a single container, and prints Machine Id either side, because that is the whole question: if the id is stable within the container and the return still fails, the container split is not the explanation and the real cause is still unfound. Skipped cleanly when no serial is configured. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Warning Review limit reachedNext included review available in 36 minutes. View limit detailsLimit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (5)
📒 Files selected for processing (2)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The new warning told users "Node-locked serial activations are released by Unity on their own; no action is needed." That was never verified. Unity Pro serials have a finite number of activations, so if they are not released, reassuring someone that nothing is needed could let them exhaust the limit and then be surprised by it. Replaced with what is actually known: the return failed because of a machine binding, that is expected when activation and return happen on different machines, and if activations later run out they can be released at id.unity.com. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #274, which fixed the retry-burn and the misleading warning but did not establish why a user's return fails in a normal build.
The capability matrix runs
activateandreturn-licenseas separate commands — separate containers, separate machine identities — so its returns always fail on a binding mismatch. A normal build sources both in one container viarunsteps.sh, so it should not. That has never been measured.This adds a serial activate-then-return pair inside a single container, printing
Machine Ideither side. That's the whole question:Skipped cleanly when no serial is configured.
🤖 Generated with Claude Code