Skip to content

Detect more Unity license-contention signatures and cover the device-build job#4716

Open
allister-beamable wants to merge 1 commit into
mainfrom
ci/unity-license-detection
Open

Detect more Unity license-contention signatures and cover the device-build job#4716
allister-beamable wants to merge 1 commit into
mainfrom
ci/unity-license-detection

Conversation

@allister-beamable

Copy link
Copy Markdown
Contributor

Follow-up to #4702. The serial-throttling (max-parallel: 1) is the real fix and should keep these gates from tripping — this PR just makes the detection solid for the cases where they do.

#4702 added a problem matcher plus a post-failure annotation to the two Unity test shards, but left two gaps:

1. The matcher missed the leading contention signature

It recognized only No valid Unity Editor license found and the ULF-return tail. The actual leading symptom of a lost seat is the licensing subsystem's Found 0 entitlement groups and 0 free entitlements 404, preceded by Access token is unavailable; failed to update. That 404 (plus the downstream com.unity.editor.headless was not found) is what headlined the contention failures, yet none of it matched — so the live annotations never named the real cause.

This adds two matcher patterns: unity-license-no-entitlements and unity-license-access-token-unavailable.

2. The device-build job had no detection at all

Build for {iOS,Android,StandaloneWindows,StandaloneOSX} shares the UNITY_SERIAL_DEVOPS seat and is exactly where contention surfaced, but it had neither the matcher registration nor an annotation step — only the test shards did.

This registers the matcher in the build job and adds an annotation step. The build job keys off an empty dist/ (a seat failure aborts before the player is built). Because an empty dist/ also describes a genuine build break, that message points back at the license annotations rather than asserting contention outright — unlike the test shards' XML check.

Notes

  • Problem-matcher annotations are informational; they do not change job outcome (still controlled by step exit codes), so a stray match can't turn a green build red.
  • Container-action stdout scope for the matcher is still unconfirmed (same caveat Throttle Unity CI license activations to the per-serial seat budget #4702 carries); the artifact-absence annotation is the reliable fallback either way.

🤖 Generated with Claude Code

…build job

PR #4702 added a problem matcher plus a post-failure annotation to the two
Unity test shards, but left two gaps:

  - The matcher only recognized "No valid Unity Editor license found" and the
    ULF-return tail. The leading symptom of a lost seat is the licensing
    subsystem's "Found 0 entitlement groups and 0 free entitlements" 404,
    preceded by "Access token is unavailable; failed to update" -- neither was
    matched, so the signature that actually headlined the contention failures
    slipped through the live annotations.

  - The device-build job (Build for iOS/Android/...) had no matcher
    registration and no annotation step at all, even though it shares a serial
    and is exactly where the contention surfaced.

Add the two missing license signatures to the matcher, and register the
matcher plus an annotation step in the build job. The build job's annotation
keys off an empty dist/ (a seat failure aborts before the player is built);
because an empty dist/ also describes a genuine build break, its message points
back at the license annotations rather than asserting contention outright.

With max-parallel: 1 these gates should rarely trip, but the detection is now
solid if they do.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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