Speed up mobile PR Android and iOS CI builds - #3717
Conversation
PR Android was the long pole (~17 min assembleRelease on 4 vCPU, all ABIs). Use 8 vCPU, arm64-only for PRs, and skip lint/test on this compile job so ci-gate-dev settles faster.
📋 PR Review Helper📱 Mobile App Build✅ Ready to test! (commit 🕶️ ASG Client Build⏳ Waiting for build... 🔀 Test Locallygh pr checkout 3717 |
PR Agent Orchestrator State{
"cycle": 6,
"fixRound": 0,
"totalReviewerRuns": 6,
"consecutiveNoNewReviews": 1,
"openFindings": [],
"resolvedFindings": [],
"nitFindings": [],
"phase": "discovery",
"status": "in_progress",
"lastPair": [
"standards",
"depth"
],
"stagnationFixRounds": 0,
"lastOpenCount": 0,
"fingerprintReopenCounts": {},
"mutedFingerprints": [],
"revision": 17
} |
|
bugbot run |
🤖 PR Agent Review — cycle 6✅ No blocking findings · 0 blocking · 0 nits Claude — standards — ✅ approveCommander, recon complete. Full sweep of the PR against MentraOS doctrine is done. Here's the after-action report. ReviewScope: This PR is pure CI/build infrastructure — Android/iOS workflow tuning, ABI-filter plumbing in two native Standards check — all clear:
Notes (non-blocking, not findings):
No open findings to re-test (orchestrator reported clean). No new blocking issues, no regressions, no nits worth raising. Mission verdict: approve. Claude — depth — ✅ approveCommander, recon complete. I traced the ABI-filter property through both native modules, the release script, and all three workflows, and verified the runtime property-resolution chain. Here is my after-action report. Depth review — PR #3717Change summary: CI/build infra only. Bumps the PR Android runner to 8 vCPU, adds timeouts, filters native-module ABIs by Traced and verified:
Edge cases considered: disconnect/partial-failure paths in staging (pin gate, partial upload) are untouched by this PR; AAB/Play lane now gets full ABI coverage; iOS change is timeout + debug-step removal only. No blocking logic issues found. Updated automatically by the PR Agent Orchestrator each review cycle. Nits do not block merge. |
There was a problem hiding this comment.
All reported issues were addressed across 3 files
Reply with feedback, questions, or to request a fix.
Re-trigger cubic
|
bugbot run |
Dev PRs and pushes stay arm64-only so ci-gate-dev is not waiting on emulator/32-bit NDK. Multi-ABI coverage runs on the production promotion path.
Pushes to main already passed that check on the promotion PR, so keep them arm64-only like dev.
Dev stays arm64-only. Main keeps the emulator/32-bit check after merge as well as on the promotion PR.
|
bugbot run |
|
bugbot run |
|
PR Agent Orchestrator failed. See run: https://github.com/Mentra-Community/MentraOS/actions/runs/32235996491 |
|
The Our production mobile artifacts are built on pushes to I think the intended policy should be:
There are also two concrete Android issues:
The 8-vCPU runner change and making Silero honor the ABI property look good; the routing/filtering and lint invocation need adjustment before merge. |
Full ABI belongs on staging production, not main. Stop excluding lintVital subtasks that assembleRelease still needs, honor reactNativeArchitectures in lc3Lib, and drop iOS -jobs on the shared Mac.
Deploying mentra-live-ota-site with
|
| Latest commit: |
a60adb0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://1f47c1c0.mentra-live-ota-site.pages.dev |
| Branch Preview URL: | https://ci-faster-mobile-pr-builds.mentra-live-ota-site.pages.dev |
|
Addressed Israelov's review on this push: ABI routing. This compile-check workflow is now always Lint. Dropped the lc3Lib. Same Also took Cubic's iOS note: dropped |
Deploying mentra-store-dev with
|
| Latest commit: |
a60adb0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://d4427a2b.augmentos-appstore-2.pages.dev |
| Branch Preview URL: | https://ci-faster-mobile-pr-builds.augmentos-appstore-2.pages.dev |
Deploying dev-augmentos-console with
|
| Latest commit: |
a60adb0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://4f505932.dev-augmentos-console.pages.dev |
| Branch Preview URL: | https://ci-faster-mobile-pr-builds.dev-augmentos-console.pages.dev |
Deploying prod-augmentos-account with
|
| Latest commit: |
a60adb0
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://2473d67e.augmentos-e84.pages.dev |
| Branch Preview URL: | https://ci-faster-mobile-pr-builds.augmentos-e84.pages.dev |
Summary
ci-gate-devis only as fast as the slowest gated builder. On mobile PRs that is Mobile App Android Build: last successful run spent ~17 min inassembleReleaseon a 4 vCPU / 16 GB box compiling all four ABIs. iOS was ~10 min (plus Mac-mini queue). This PR cuts that wall clock without moving ABI coverage ontomain.Production mobile artifacts come from
staging-builds.ymlon pushes tostaging, viabun run release:android. That is the full-ABI lane. This compile-check workflow stays arm64-only.4 vCPU / 16 GB→8 vCPU / 32 GB. The Expo plugin already sets-Xmx8192m; that heap was fighting the 16 GB machine.devandmain):arm64-v8aonlystaging-builds.yml→release-android.mjs): all four ABIsrelease-android.mjsno longer overwrites a caller-providedORG_GRADLE_PROJECT_reactNativeArchitectures(defaults to arm64 for local releases):lc3LibhonorsreactNativeArchitecturesthe same way Silero does, so CMake is not still building v7a/x86 on an arm64 job-x lintVitalAnalyzeRelease/-x lintVitalReportRelease.assembleReleasestill runslintVitalRelease, which then fails looking for those output files (this PR's red Android run). Android lint stays on this job; Mobile App Quality Checks is TypeScript/Jest only.rm/ disk-prune on ephemeral Blacksmith. iOS: drop-jobs $(sysctl -n hw.ncpu)on the shared Mac mini (oversubscribes concurrent branch builds); give the retry path a 90 min timeout.Expected Android dev-PR wall clock: ~19 min → ~8–12 min. Gate wait is
max(Android, iOS+queue).Pricing (Blacksmith Ubuntu x64)
We already pay Blacksmith for this job; this is a size bump, not a vendor change. iOS stays on the self-hosted Mac mini ($0 Blacksmith). Staging full-ABI is existing production traffic, not a new bill on every
devPR.19.5 min → **$0.16**8–12 min → **$0.13–$0.19**Monthly (this compile-check workflow only)
Last 15 days: 200 runs (~13.3/day) → ~400 runs/month. Almost all of that is
devPRs (arm64 after this PR). Staging full-ABI is a handful of production builds, billed onstaging-builds.yml, not here.Engineer wait is the expensive line: ~20 min blocked per mobile
devPR × ~350 PR builds/month.Test plan
devbuilds withORG_GRADLE_PROJECT_reactNativeArchitectures=arm64-v8aand does not compile:lc3Libfor v7a/x86assembleReleasegets past:app:lintVitalRelease(no missinglintVitalReportReleaseinputs)stagingsets all four ABIs andrelease-android.mjslogs that value instead of overwriting to arm64bun run release:androidwith no env still defaults to arm64devPR APK on an arm64 phone and launch Mentra-jobsNote
Cursor Bugbot is generating a summary for commit a60adb0. Configure here.