ci(audience): route all matrix jobs through set-matrix, harden Windows checkout (SDK-330)#749
Merged
ImmutableJeffrey merged 1 commit intomainfrom May 7, 2026
Merged
Conversation
d6b4d0a to
321f899
Compare
nattb8
previously approved these changes
May 7, 2026
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 321f899. Configure here.
321f899 to
586fe4c
Compare
586fe4c to
e1bdff4
Compare
…s checkout (SDK-330) - Replaces the cross-product matrix (unity x target x backend with axis-matching include items) on `playmode` with a `set-matrix` helper job that emits a fully-specified JSON matrix. - The cross-product approach silently expanded to zero playmode cells on every run since SDK-327, so Windows and macOS PlayMode tests have not actually run on PRs (verified on the SDK-327 merge commit and on PR #748). Root cause: a unity-keyed include item that has no cell to augment after the conditional `exclude` removes Unity 2022 on PR runs spawns an orphan combination missing `target`, `backend`, and `runner`; `runs-on: ${{ matrix.runner }}` then evaluates to empty and GitHub aborts the matrix. - `set-matrix` runs on ubuntu-latest, defines the full 12-cell playmode matrix, 6-cell playmode-linux matrix and 6-cell mobile matrix inline as JSON, and uses jq to strip Unity 2022.3.62f2 cells when the trigger is pull_request. Schedule and workflow_dispatch get the full sets. - All three matrix-driven jobs now declare `needs: set-matrix` and consume `matrix.include: fromJSON(needs.set-matrix.outputs.<key>)`. Each cell carries every key the steps need, so no axis-match augmentation step can silently drop keys, and the workflow graph shows all three jobs hanging off set-matrix in one place. - `mobile-build` PR runs drop Unity 2022.3.62f2 to match the playmode and playmode-linux trim. Schedule and workflow_dispatch keep all 3 Unity versions. Steps unchanged. - `playmode-linux` matrix moved from cross-product + conditional exclude to the same set-matrix-fed include pattern. Same 6 cells on schedule, same 4 cells on PR; behaviour unchanged. - Hardens the Windows pre-checkout cleanup. The previous Kill-stale step only covered Unity-family processes and slept 2 seconds, then handed off to actions/checkout@v4 which would die with EBUSY on stuck files in examples/audience. New step adds bee_backend and mono to the kill list, sleeps 3 seconds, and force-removes the workspace contents in a retry loop so checkout's own cleanup is left with nothing to do. Linear: https://linear.app/imtbl/issue/SDK-330 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
e1bdff4 to
bd9b905
Compare
nattb8
approved these changes
May 7, 2026
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.

Summary
main. Since SDK-327 was merged, theplaymodejob has been silently expanding to 0 cells (only the 6 mobile-build cells ran on every PR). Root cause: the cross-product matrix had aunity-keyed include item that, after the conditionalexcluderemoved Unity 2022 on PR runs, spawned an orphan combination missingtarget/backend/runner;runs-on: ${{ matrix.runner }}then evaluated to empty and GitHub aborted the entire matrix.set-matrixhelper job that emits fully-specified JSON matrices forplaymode,playmode-linux, andmobile-build, conditioned ongithub.event_name. Each cell in the JSON carries every key the steps need, so no augmentation step can silently drop keys.needs: set-matrixand consumematrix.include: fromJSON(needs.set-matrix.outputs.<key>). The workflow graph now shows all three matrix jobs hanging offset-matrixin one place; the matrix definitions are also colocated in one step for easier maintenance.jqfilter. Schedule and workflow_dispatch get the full sets.actions/checkout@v4, which would die with EBUSY on stuck files inexamples/audience. The new step addsbee_backendandmono*to the kill list, sleeps 3 seconds, then force-removes the workspace contents in a 6-attempt retry loop so checkout's own cleanup is left with nothing to do.main. This PR rebased on top, so mobile-build'sifkeeps the explicit(pull_request && !fork) || schedule || workflow_dispatchform and mobile uses 6000.4.0f1 like the other jobs.Coverage matrix after merge
Mobile is IL2CPP-only by design (Unity mobile production builds don't use Mono2x); that predates SDK-327 and is unchanged.
Linear: SDK-330