ci: collapse iOS scheme matrix into single sequential job#14
Conversation
The ios-build job ran a strategy.matrix over [CodingPlanAuth, CodingPlanCodex], spawning two parallel macOS runners that each paid the full boot/checkout/Xcode-warmup cost just to invoke xcodebuild with a different -scheme. Run both schemes in one job, sequentially. The second build reuses warm DerivedData so wall-clock impact is well under 2x, and macOS minutes for this job drop ~50%. The fail-fast: false semantic is preserved by gating step two on if: always() so a CodingPlanAuth failure no longer hides a CodingPlanCodex failure.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 04c89cb7e8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Code ReviewOverall: Looks good — clean, well-motivated change. What this doesCollapses the two-scheme Strengths
Suggestions1. The current condition if: success() || failure()Both are equivalent here ( 2. Timeout may be tight (worth watching) The timeout is still 25 minutes. Previously each matrix job had its own 25-minute budget; now both builds share one budget sequentially. 3. No The VerdictThe logic is sound and the trade-off (sequential latency vs. halved macOS minutes) is well-justified for a project at this scale. No blocking issues. |
Replaces `if: always() && steps.build_auth.conclusion != 'cancelled'` with the idiomatic `if: success() || failure()` — semantically equivalent (both run on every job state except cancelled) but uses the built-in status functions readers reach for first. The `id: build_auth` is no longer needed and is removed. Per review feedback on PR #14.
Summary
strategy.matrixover[CodingPlanAuth, CodingPlanCodex]in theios-buildjob with a single job that runs bothxcodebuildinvocations sequentially.DerivedDatabetween builds.fail-fast: falsebehavior by gating the second build onif: always() && steps.build_auth.conclusion != 'cancelled'so aCodingPlanAuthfailure no longer hides aCodingPlanCodexfailure.Test plan
Build for iOS Simulatorjob builds both schemes successfully.if: always()gate by inspecting the workflow run — both build steps should appear regardless of the first step's outcome.spmanddoccjobs still run (no incidental changes to those).