[No QA] fix: iOS deploy uploading wrong IPA to TestFlight#83350
[No QA] fix: iOS deploy uploading wrong IPA to TestFlight#83350roryabraham merged 9 commits intomainfrom
Conversation
The find command used to locate the .ipa artifact was recursing into the Mobile-Expensify submodule and picking up a test fixture (Mobile-Expensify/tests/iOS/Payload.ipa) instead of the actual build artifact. This caused Fastlane to upload the test fixture to App Store Connect, which would never process, causing the job to hang for hours. Add -maxdepth 1 to all find commands that locate .ipa and .dSYM.zip files so they only search the directory where artifacts are downloaded. Co-authored-by: Cursor <cursoragent@cursor.com>
The find commands were recursing into the Mobile-Expensify submodule and picking up test fixtures (e.g. Mobile-Expensify/tests/iOS/Payload.ipa) or framework dSYMs (e.g. Turf.framework.dSYM.zip) instead of the actual build artifacts. - Hardcode known filenames: Expensify.apk, Expensify.app.dSYM.zip - Use shell globs (*.ipa, *.aab) for build-produced files with unknown names -- globs don't recurse into subdirectories - Add fail-fast validation so missing artifacts produce clear errors instead of silently uploading the wrong file - Add debug logging (ls) to show all candidates in CI output Co-authored-by: Cursor <cursoragent@cursor.com>
Build workflows now output the exact filenames they produce: - buildAndroid: AAB_FILENAME, APK_FILENAME (always Expensify.apk) - buildIOS: IPA_FILENAME (from Rock export), DSYM_FILENAME (Expensify.app.dSYM.zip) Deploy jobs reference these outputs directly instead of using find or glob to discover artifacts. This eliminates the risk of picking up wrong files from submodules or framework dSYMs. Co-authored-by: Cursor <cursoragent@cursor.com>
For consistency with buildAndroid and buildIOS, buildWeb now outputs TAR_FILENAME, ZIP_FILENAME, and SOURCEMAP_FILENAME. Deploy references the tar filename from the build output instead of hardcoding it. Co-authored-by: Cursor <cursoragent@cursor.com>
- buildAndroid: SOURCEMAP_FILENAME (index.android.bundle.map), PROGUARD_MAPPING_FILENAME (mapping.txt) - buildIOS: SOURCEMAP_FILENAME (main.jsbundle.map) These will be needed by a future Sentry upload job to reference the correct artifacts without discovery. Co-authored-by: Cursor <cursoragent@cursor.com>
Reference needs.buildWeb.outputs.TAR_FILENAME instead of hardcoding webBuild.tar.gz, matching the pattern used in deploy.yml. Co-authored-by: Cursor <cursoragent@cursor.com>
|
🚧 @roryabraham has triggered a test Expensify/App build. You can view the workflow run here. |
- buildAndroid: group consecutive GITHUB_OUTPUT redirects (SC2129) - buildIOS: use find instead of ls for IPA discovery (SC2012) Co-authored-by: Cursor <cursoragent@cursor.com>
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
@mjasikowski Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
On Adhoc builds with a Rock remote-cache hit, the IPA only exists on Rock's servers (via ROCK_ARTIFACT_URL) and isn't materialized locally. Warn instead of failing in this case, matching the Android build's behavior for missing AAB files. Release builds still hard-fail. Co-authored-by: Cursor <cursoragent@cursor.com>
|
@codex review |
GitHub Actions runs bash with set -e, so find returning non-zero (because .rock/cache/ios/export/ doesn't exist on cache hits) would kill the step before reaching the Adhoc warning fallback. Add || true to match the pattern used in the Android build. Co-authored-by: Cursor <cursoragent@cursor.com>
|
@codex review |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
|
Codex Review: Didn't find any major issues. Can't wait for the next one! ℹ️ About Codex in GitHubCodex has been enabled to automatically review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback". |
[No QA] fix: iOS deploy uploading wrong IPA to TestFlight (cherry picked from commit 432aa05) (cherry-picked to staging by roryabraham)
|
🚀 Cherry-picked to staging by https://github.com/roryabraham in version: 9.3.25-13 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.3.25-13 🚀
|
|
🚀 Cherry-picked to staging by https://github.com/roryabraham in version: 9.3.26-0 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.3.26-8 🚀
|
Explanation of Change
The
findcommands indeploy.ymlthat locate.ipaand.dSYM.zipartifacts were recursing into theMobile-Expensifysubmodule directory. This caused them to pick up a test fixture atMobile-Expensify/tests/iOS/Payload.ipainstead of the actual build artifact downloaded to the repo root.The test fixture IPA has metadata like
app_version: 1.0, build_version: 1, so when uploaded to App Store Connect, it would never process into a real build – causing Fastlane to hang at "Waiting for the build to show up in the build list" for hours until timeout.The fix adds
-maxdepth 1to allfindcommands that locate.ipaand.dSYM.zipfiles, restricting the search to the directory where artifacts are downloaded.Fixed Issues
N/A – fix for broken staging deploys
Tests
None - CP to test.
Offline tests
N/A – CI/CD workflow change only.
QA Steps
[No QA]
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.ScrollViewcomponent to make it scrollable when more elements are added to the page.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
N/A – CI/CD change only
Android: mWeb Chrome
N/A – CI/CD change only
iOS: Native
N/A – CI/CD change only
iOS: mWeb Safari
N/A – CI/CD change only
MacOS: Chrome / Safari
N/A – CI/CD change only
Made with Cursor