Skip to content

Conversation

@sethkfman
Copy link
Contributor

@sethkfman sethkfman commented Nov 7, 2025

Description

  • Disables fingerprinting and caching
    • Cache builds are hiding numerous errors in the system. This needs to be audited and reconfigured with both the @metamask-mobile-platform and DevOps team
  • Minor update to make sure test apks are generated for release builds
    • Caused due to a pipeline update failure masked by cache builds
  • Revert of Expo Updates feat: implement eas updates #17431
    • Causing Android build failure (Platform team will investigate)

Changelog

CHANGELOG entry:

Related issues

Fixes:

Manual testing steps

Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]

Screenshots/Recordings

Before

After

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Disables Android E2E fingerprint/cache/repack, adds reliable test APK handling, and removes Expo Updates/OTA across app, iOS, and dependencies.

  • CI/Build (Android E2E)
    • Disable fingerprint generation, APK cache restore, and repack steps in .github/workflows/build-android-e2e.yml.
    • Ensure test APKs are built and uploaded; add AAB upload (non-blocking).
    • New E2E build path in scripts/build.sh with GitHub-optimized Gradle props, retry, and output verification; wired for main/flask and legacy releaseE2E.
    • Add default testBinaryPath fallbacks in .detoxrc.js for all Android variants.
    • Tune CI Gradle settings in android/gradle.properties.github (lower heap/workers, disable VFS watch, x86_64 arch).
  • Remove Expo Updates/OTA
    • Delete OTA/updates files: ota.config.js, app/constants/ota.ts, app/__mocks__/expo-updates.ts, ios/Expo.plist, scripts/update-expo-channel.js.
    • Strip OTA/updates UI and logic from app/components/Views/Settings/AppInformation/index.js and index.js (remove expo-asset).
    • Remove mocks mapping from jest.config.js.
    • Simplify app.config.js (remove updates/runtime config; keep core plugins only).
    • Clean ios/Podfile/Podfile.lock to drop expo-updates/related pods; remove Expo.plist references in Xcode project.
    • Drop expo-asset and expo-updates from package.json; update to 7.60.0; lockfile pruned accordingly.
  • Misc
    • Update CODEOWNERS (remove scripts/update-expo-channel.js; add card slice path).
    • Remove unused env var from .js.env.example.

Written by Cursor Bugbot for commit 0adea28. This will update automatically on new commits. Configure here.

@github-actions
Copy link
Contributor

github-actions bot commented Nov 7, 2025

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot metamaskbot added the team-mobile-platform Mobile Platform team label Nov 7, 2025
weitingsun
weitingsun previously approved these changes Nov 7, 2025
@github-actions github-actions bot added the size-M label Nov 7, 2025
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Bug: Broken Reference Causes Build Logic Failure

The condition references steps.apk-cache-restore.outputs.cache-hit but the apk-cache-restore step is now commented out. This causes the build step to always run since the condition evaluates to false, which may be intentional but creates a broken reference to a non-existent step.

.github/workflows/build-android-e2e.yml#L136-L137

- name: Build Android E2E APKs
if: ${{ steps.apk-cache-restore.outputs.cache-hit != 'true' }}

Fix in Cursor Fix in Web


Bug: Broken Dependency Halts Artifact Upload

The upload step references steps.determine-target-paths.outputs.apk-target-path and steps.determine-target-paths.outputs.artifact_name but the determine-target-paths step is commented out. This causes empty path values, making the artifact upload fail with if-no-files-found: error.

.github/workflows/build-android-e2e.yml#L248-L256

- name: Upload Android APK
id: upload-apk
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.build_type }}-${{ inputs.metamask_environment }}-release.apk
path: ${{ steps.determine-target-paths.outputs.apk-target-path }}/${{ steps.determine-target-paths.outputs.artifact_name }}.apk
retention-days: 7
if-no-files-found: error

Fix in Cursor Fix in Web


Bug: Commented Code Disrupts Upload Workflow

The upload step references steps.determine-target-paths.outputs.test-apk-target-path and steps.determine-target-paths.outputs.artifact_name but the determine-target-paths step is commented out. This causes empty path values, making the test APK upload fail with if-no-files-found: error.

.github/workflows/build-android-e2e.yml#L257-L265

- name: Upload Android Test APK
id: upload-test-apk
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.build_type }}-${{ inputs.metamask_environment }}-release-androidTest.apk
path: ${{ steps.determine-target-paths.outputs.test-apk-target-path }}/${{ steps.determine-target-paths.outputs.artifact_name }}-androidTest.apk
retention-days: 7
if-no-files-found: error

Fix in Cursor Fix in Web


Bug: Configuration Error Blocks AAB Upload

The upload step references steps.determine-target-paths.outputs.aab-target-path and steps.determine-target-paths.outputs.artifact_name but the determine-target-paths step is commented out. This causes empty path values, making the AAB upload fail (though continue-on-error: true prevents workflow failure).

.github/workflows/build-android-e2e.yml#L266-L275

- name: Upload Android AAB
id: upload-aab
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.build_type }}-${{ inputs.metamask_environment }}-release.aab
path: ${{ steps.determine-target-paths.outputs.aab-target-path }}/${{ steps.determine-target-paths.outputs.artifact_name }}.aab
retention-days: 7
if-no-files-found: warn
continue-on-error: true

Fix in Cursor Fix in Web


Bug: Empty Outputs Cripple Dependent Workflows

The job outputs reference steps.determine-target-paths.outputs.* but the determine-target-paths step is commented out. This causes all these output values to be empty, breaking any downstream workflows or jobs that depend on these outputs.

.github/workflows/build-android-e2e.yml#L41-L45

aab-uploaded: ${{ steps.upload-aab.outcome == 'success' }}
apk-target-path: ${{ steps.determine-target-paths.outputs.apk-target-path }}
test-apk-target-path: ${{ steps.determine-target-paths.outputs.test-apk-target-path }}
aab-target-path: ${{ steps.determine-target-paths.outputs.aab-target-path }}
artifact_name: ${{ steps.determine-target-paths.outputs.artifact_name }}

Fix in Cursor Fix in Web


@sethkfman sethkfman requested review from a team as code owners November 7, 2025 21:51
@github-actions github-actions bot added size-L and removed size-M labels Nov 7, 2025
weitingsun
weitingsun previously approved these changes Nov 7, 2025
@sethkfman sethkfman changed the title fix: comment out the fingerprint, repack, cache restore for Android E2E fix: disable fingerprint, repack, cache restore for Android E2E & revert Expo Updates Nov 7, 2025
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Bug: Essential File Missing, Build Process Fails.

The build script calls node "${__DIRNAME__}/update-expo-channel.js" but this file was deleted in the PR. This will cause all builds to fail with a file not found error when the script attempts to update Expo channel configuration.

scripts/build.sh#L809-L812

fi
# Update Expo channel configuration based on environment
echo "Updating Expo channel configuration..."
node "${__DIRNAME__}/update-expo-channel.js"

Fix in Cursor Fix in Web


…rties on githuh with a different distribution of resources, retry logic for assemble apk
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Bug: Remove Dead Code Breaking Builds.

The build script calls update-expo-channel.js which was deleted in this PR, causing all builds to fail with a file-not-found error. This leftover reference needs to be removed since Expo Updates functionality has been completely removed.

scripts/build.sh#L852-L855

fi
# Update Expo channel configuration based on environment
echo "Updating Expo channel configuration..."
node "${__DIRNAME__}/update-expo-channel.js"

Fix in Cursor Fix in Web


@tommasini tommasini added the no-changelog no-changelog Indicates no external facing user changes, therefore no changelog documentation needed label Nov 8, 2025
@tommasini
Copy link
Contributor

  • Start using the gradle.properties.github that excludes multiple archs (so CI was not being able to handle that many processes)
  • Removed the buildAndroidE2E step from the buildBinary function and moved it to the buildAndroid function
    Added retry mechanism if the gradlew fails
  • Than the binary was not found by detox and I've re-added (was removed) a fallback to the binaryPath at detox
  • Handling the OOM issue at gradle.properties.github, by limiting paralellism with reduced memory (leaving memory to not crash)

@codecov-commenter
Copy link

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 77.86%. Comparing base (3d1cea8) to head (0adea28).
⚠️ Report is 27 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main   #22349      +/-   ##
==========================================
- Coverage   77.87%   77.86%   -0.02%     
==========================================
  Files        3824     3825       +1     
  Lines       97821    98103     +282     
  Branches    19163    19236      +73     
==========================================
+ Hits        76181    76388     +207     
- Misses      16437    16481      +44     
- Partials     5203     5234      +31     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@sonarqubecloud
Copy link

sonarqubecloud bot commented Nov 8, 2025

@christopherferreira9 christopherferreira9 added the run-android-flask-e2e-smoke Run Android flask E2E tests on next CI run label Nov 10, 2025
@tommasini tommasini enabled auto-merge November 10, 2025 10:55
@tommasini tommasini changed the title fix: disable fingerprint, repack, cache restore for Android E2E & revert Expo Updates fix: disable fingerprint, repack, cache restore for Android E2E & revert Expo Updates cp-7.59.0 Nov 10, 2025
@tommasini tommasini added this pull request to the merge queue Nov 10, 2025
Merged via the queue into main with commit fbc08a6 Nov 10, 2025
248 of 262 checks passed
@tommasini tommasini deleted the fix/disable-fingerprint-repack branch November 10, 2025 11:47
@github-actions github-actions bot locked and limited conversation to collaborators Nov 10, 2025
@metamaskbot metamaskbot added the release-7.60.0 Issue or pull request that will be included in release 7.60.0 label Nov 10, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

no-changelog no-changelog Indicates no external facing user changes, therefore no changelog documentation needed release-7.60.0 Issue or pull request that will be included in release 7.60.0 run-android-flask-e2e-smoke Run Android flask E2E tests on next CI run size-L team-mobile-platform Mobile Platform team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants