ci: add fast and full PR validation lanes - #649
Conversation
Sample app builds 📱Below you will find the list of the latest versions of the sample apps. It's recommended to always download the latest builds of the sample apps to accurately test the pull request. Builds are in progress. This comment will be updated when they finish.
|
Revised CI decision after correctness reviewExact head: The review feedback was correct: semantic-release intent is not a correctness boundary. A
This CI-changing PR intentionally exercised APN iOS, APN Android, and FCM iOS with no The FCM verification job consumed 27m49s of Mac runner time on this final run. A routine JavaScript-only PR keeps APN verification but avoids that FCM job; native and integration-sensitive changes still run it automatically. Claude Code Opus rejected the earlier semantic lane split, then returned APPROVE after the path-based redesign. Local lint, the focused Swift state test, actionlint, and the final hosted head all passed. |
There was a problem hiding this comment.
Cross-repo review — the same change across five repos.
The lane gating looks right: omitting always() so a skipped prepare transitively blocks E2E, and moving the dependabot guard to github.event.pull_request.user.login (on a labeled event github.actor is the labeler, not the author).
Main ask: the release-policy script and reusable workflow are byte-identical in all five repos today (sha256 match), so extracting them to mobile-ci-tools is free now and a five-repo change after merge.
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, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 78264a4. Configure here.
mahmoud-elmorabea
left a comment
There was a problem hiding this comment.
verify_buildhas never executed in CI. The commit scan keeps forcing the distribution lane, so the new unsigned step is still unproven — specifically-workspace ios/SampleApp.xcworkspace -scheme SampleAppand./android/gradlew -p android :app:assembleRelease.SampleApp.xcodeprojis generated and has gone stale before. Please get one run of this path green before merge.setup-ios/v1still runs unconditionally, ahead of aCODE_SIGNING_ALLOWED=NObuild. It performs fastlane match and needsGOOGLE_CLOUD_MATCH_READONLY_SERVICE_ACCOUNT_B64. Gating it onshould_distributesaves time on every routine PR and makes the lane fork-safe.- Scene-E2E path list widened from a precise ~25-entry list to
.maestro/**,src/**,ios/wrappers/**. That is a much larger trigger surface on thexcode-27pool — confirm it is intended. build-sample-appshas no fork/dependabot guard (always() && needs.prepare.result == 'success'), unlike the sibling jobs. Pre-existing, butprepareis the natural place to add it.
|
Addressed the actionable review feedback in d88be54.\n\n- Added an explicit manual unsigned verification lane, with unsigned as the safe default.\n- Isolated manual verification concurrency from signed branch distribution, so verification cannot cancel or delay a release-side run.\n- Derived the unsigned three-app matrix from the distribution matrix to prevent drift.\n- Kept fork and Dependabot builds intentionally active through the unsigned matrix. Only signing and distribution are restricted.\n- Kept setup-ios for unsigned iOS builds because the current action only selects Xcode; it does not run match or consume signing credentials.\n- The scene-routing selector at the current head uses the precise direct-path list, not broad src/** or ios/wrappers/** triggers.\n\nHosted proof: the manual unsigned run passed for iOS APN, iOS FCM, and Android APN. All Fastlane distribution and PR-comment side-effect steps were skipped. |

Summary
ci:fullValidation
npm pack --dry-runpassedassembleReleasepassed, including release bundling, R8, lint-vital, and packaging