Skip to content

fix(ci): restore iOS 26 test leg by guarding empty matrix.macos at call site#476

Merged
wmathurin merged 1 commit into
forcedotcom:devfrom
wmathurin:fix-restore-ios26-ci-leg
Jul 7, 2026
Merged

fix(ci): restore iOS 26 test leg by guarding empty matrix.macos at call site#476
wmathurin merged 1 commit into
forcedotcom:devfrom
wmathurin:fix-restore-ios26-ci-leg

Conversation

@wmathurin

Copy link
Copy Markdown
Contributor

Problem

When a matrix include entry omits macos, ${{ matrix.macos }} evaluates to an empty string. When passed as a workflow_call input, an empty string overrides the reusable workflow's default: macos-latest — leaving runs-on: "", which causes GitHub to silently produce no job for that matrix leg. The iOS 26 / Xcode 26 leg has been silently absent from every PR and nightly run since the matrix was restructured.

Credit to @james-enperso for identifying the regression and confirming it against the live GitHub jobs API (PR #474).

Root cause

The issue is at the call site, not in the matrix. ${{ matrix.macos }} passes an explicit empty string, which GitHub Actions does not treat as "not supplied" — so the default: in reusable-workflow.yaml never fires.

Fix

Add || 'macos-latest' at the call site in both pr.yaml and nightly.yaml:

# before
macos: ${{ matrix.macos }}

# after
macos: ${{ matrix.macos || 'macos-latest' }}

This means:

  • Any matrix row that sets macos explicitly (e.g. macos: macos-15 on the ^18 leg) passes that value through unchanged.
  • Any matrix row that omits macos (e.g. the ^26 leg) automatically gets macos-latest — no per-row bookkeeping required.
  • macos-latest remains the single source of truth in reusable-workflow.yaml; future matrix additions won't silently skip if they forget to set macos.

Why not add macos: macos-latest to the ^26 include entry?

That approach (taken in PR #474) works for today's matrix but duplicates the default string across three files and leaves the codebase one forgotten entry away from the same silent-skip bug recurring. The call-site fallback is self-enforcing.

Test plan

  • Confirm the next PR run contains the iOS ^26 job again (4 jobs total: permission-check + android-pr + ios-pr (^26) + ios-pr (^18)).
  • Confirm ios-pr (^18) still runs on macos-15 (the explicit override is preserved).

🤖 Generated with Claude Code

…ll site

When a matrix include entry omits `macos`, `${{ matrix.macos }}` evaluates
to an empty string which, when passed as a workflow_call input, overrides
the reusable workflow's `default: macos-latest` — causing `runs-on: ""`
and silently producing no job for that leg.

Fix by adding `|| 'macos-latest'` at the call site in both pr.yaml and
nightly.yaml, so any matrix row that omits `macos` automatically gets the
right runner without requiring explicit per-row bookkeeping.

Credit to @james-enperso for identifying the regression and confirming it
against the live GitHub jobs API (PR forcedotcom#474).
@github-actions

github-actions Bot commented Jul 6, 2026

Copy link
Copy Markdown
TestsPassed ✅SkippedFailed
iOS ^18 Test Results35 ran35 ✅
TestResult
No test annotations available

@wmathurin
wmathurin merged commit a0db5ec into forcedotcom:dev Jul 7, 2026
6 of 7 checks passed

@brandonpage brandonpage left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NIT: I think the correct way to do this is to put macos: macos-latest under matrix. That way it will be used for all unless an include overrides it (the default).

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.

3 participants