[pull] main from MetaMask:main#379
Merged
Merged
Conversation
<!-- Please submit this PR as a draft initially. Do not mark it as "Ready for review" until the template has been completely filled out, and PR status checks have passed at least once. --> ## **Description** <img width="1144" height="354" alt="Screenshot 2025-11-26 at 10 53 04 AM" src="https://github.com/user-attachments/assets/6dbe890a-6fbe-4b31-81bf-e688c28a8149" /> 1. Add readme for using OTA updates on nightly builds 2. change EAS update org name from metamask-test to metamask 3. Add "message" as an input for the workflow 4. Env variables were not getting picked up after pushing EAS updates 5. update update-expo-channel so we now have rc and exp channels for rc and exp builds ## **Changelog** <!-- If this PR is not End-User-Facing and should not show up in the CHANGELOG, you can choose to either: 1. Write `CHANGELOG entry: null` 2. Label with `no-changelog` If this PR is End-User-Facing, please write a short User-Facing description in the past tense like: `CHANGELOG entry: Added a new tab for users to see their NFTs` `CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker` (This helps the Release Engineer do their job more quickly and accurately) --> CHANGELOG entry: Added readme for using OTA updates on nightly builds ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Fix Env variables not getting picked up Scenario: user pushes EAS updates Given the app requires an OTA update When user pushes a new update Then env variables should not be changed ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <img width="1170" height="2532" alt="File (6)" src="https://github.com/user-attachments/assets/22f3529d-8a29-448c-af17-4c0bdea7fce6" /> <!-- [screenshots/recordings] --> ### **After**  <!-- [screenshots/recordings] --> ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [ ] I’ve included tests if applicable - [ ] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Wires EAS OTA publishing through build.sh with message input and envs, enables exp/rc update channels, switches Expo owner to metamask, and adds docs for nightly OTA updates. > > - **Workflows**: > - **push-eas-update.yml**: Rename to EXP build; add `inputs.message` and propagate as `UPDATE_MESSAGE`; switch environment to `build-exp`; inject required env vars/secrets; replace inline `eas update` with `yarn build:expo-update:main:exp`; improve config logging and summaries. > - **ci.yml**: Increase Node heap for iOS bundle generation via `NODE_OPTIONS`. > - **Build/Scripts**: > - **`scripts/build.sh`**: Add `buildExpoUpdate()` to sign and run `eas update` (uses `EXPO_CHANNEL`, `EXPO_KEY_PRIV`, `UPDATE_MESSAGE`); add `PLATFORM=expo-update` path; skip `update-expo-channel` when running Expo updates. > - **`package.json`**: Add `build:expo-update:main:*` scripts. > - **`scripts/update-expo-channel.js`**: Support `exp` and `rc` configs (channels `exp`/`rc`), refactor `getConfigForEnvironment(env)`, and only apply for `exp`/`rc`. > - **Config**: > - **`app.config.js`**: Change Expo `owner` to `metamask`. > - **Docs**: > - Add `docs/nightly-ota-updates.md` with guidance for OTA on nightly builds. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3440eb8. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: sethkfman <seth.kaufman@consensys.net>
## **Description** Enlarge question mark icon in lend header ## **Changelog** CHANGELOG entry:null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MDP-399 ## **Manual testing steps** ```gherkin 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 | | -------- | ------- | |  |  | ### **Before** `~` ### **After** `~` ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Sets the staking header’s question icon to large by adding `size={IconSize.Lg}` to the `Icon` in `getStakingNavbar`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 7a71bce. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Refine styles for lend UI ## **Changelog** CHANGELOG entry:null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MDP-598 ## **Manual testing steps** ```gherkin 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** No Positions | before | after | | -------- | ------- | |  |  | Active Positions | before | after | | -------- | ------- | |  |  | ### **Before** `~` ### **After** `~` ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Theme-enable Earn lending components, add a styled buttons container when positions exist, and update empty state/background spacing with snapshot updates. > > - **UI (Earn)**: > - `EarnLendingBalance` > - Integrate theming: pass `theme` to `styleSheet` via `useTheme` and `useStyles`. > - Add `styles.buttonsContainer` (background, padding, radius, margin) applied when `userHasLendingPositions`. > - Minor layout tweaks: remove top padding from `container`; adjust spacing. > - `EmptyStateCta` > - Update container styling to `colors.background.section` and add top margin. > - **Tests**: > - Update snapshots to reflect new themed backgrounds, margins, and button container styling. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 047ea4a. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
… tests and workflows (#23630) ## **Description** Removing the rest of the `MM_REMOVE_GLOBAL_NETWORK_SELECTOR` feature flags from E2E tests and workfolows Previous PRs relating to this feature flag removal: [chore: remove MM_REMOVE_GLOBAL_NETWORK_SELECTOR from hooks, lists, and control bars](#22574) [chore: remove global network selector feature flag from selectors and polling](#22463) [chore: Remove MM_REMOVE_GLOBAL_NETWORK_SELECTOR feature flag from component level](#22067) ## **Changelog** CHANGELOG entry:null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MUL-1132 ## **Manual testing steps** ```gherkin 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** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Removes the MM_REMOVE_GLOBAL_NETWORK_SELECTOR flag from workflows and env, and refactors E2E tests to drop conditional paths, unify network selection, and delete obsolete specs. > > - **CI Workflows**: > - Remove `MM_REMOVE_GLOBAL_NETWORK_SELECTOR` env from `github/workflows/**` (`build-android-e2e.yml`, `build-ios-e2e.yml`, `run-e2e-smoke-tests-android-flask.yml`, `run-e2e-workflow.yml`). > - **Env Examples**: > - Delete `MM_REMOVE_GLOBAL_NETWORK_SELECTOR` from `.js.env.example` and its comments. > - **E2E Tests**: > - Consolidate tests by removing conditional gating on `MM_REMOVE_GLOBAL_NETWORK_SELECTOR` and duplicative suites: > - `e2e/specs/confirmations-redesigned/.../per-dapp-selected-network.spec.ts`: drop flag checks, remove `NetworkEducationModal` usage, unify network change via `WalletView.tapTokenNetworkFilter()`. > - `e2e/specs/networks/add-popular-networks.spec.ts`: simplify to a single smoke test using the multi-selector; remove regression variant and `NetworkAddedBottomSheet` flow. > - `e2e/specs/quarantine/.../permission-system-add-non-permitted.failing.js`: remove flag branches and unused imports; standardize flows to token network filter; keep permitted/non-permitted chain tests. > - `e2e/specs/settings/addressbook-send-add-contact.spec.ts`: remove flag-gated tests; always run "different network" contact flow. > - Remove obsolete specs: > - `e2e/specs/networks/networks-search.spec.ts` (deleted). > - `e2e/specs/settings/fiat-on-testnets.spec.ts` (deleted). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5932ffa. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…60.3 (#23642) ## **Description** This PR fixes an issue where the deeplink interstitial modal was incorrectly appearing when barebones deeplinks (links without pathnames and query parameters) opened the MetaMask app. **Problem:** Third-party applications, especially those using WalletConnect, commonly deeplink back into MetaMask using barebones URLs like `metamask://` or `link.metamask.io/`. These links are intentionally minimal and serve only to open the app without navigating to a specific action. However, the current implementation was processing these links through the full deeplink handling flow, which triggered the interstitial modal and signature verification checks unnecessarily. **Solution:** Added an early return in `handleUniversalLink` to skip processing when a validated URL has no pathname and no query parameters. This prevents the interstitial modal from appearing and avoids unnecessary signature verification for these barebones deeplinks, providing a smoother user experience when third-party apps redirect users back to MetaMask. **Technical Changes:** - Added early return logic in `handleUniversalLink` to detect and skip barebones deeplinks - Updated tests to verify skip behavior for links without pathname/query params - Ensured `hasSignature` is not called when processing is skipped ## **Changelog** CHANGELOG entry: Fixed unexpected interstitial modal from appearing for barebones deeplinks ## **Related issues** Fixes: #23641 This fix prevents the deeplink interstitial from appearing when barebones (links without pathnames and query params) deeplinks opens the app. This is a common use case from third party apps especially when using WC. Apps usually deeplink back into metamask via `metamask://` ## **Manual testing steps** ```gherkin 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** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> From @v-goyal - https://consensys.slack.com/archives/C8RSKCNCD/p1764729786354199?thread_ts=1764724329.879139&cid=C8RSKCNCD ### **After** <!-- [screenshots/recordings] --> This video shows the fix using the Interface app and includes a smoke test with a few other deeplinks https://github.com/user-attachments/assets/c5eeb33b-4523-4f6a-b90d-0d94608e55a9 ## **Pre-merge author checklist** - [x] I’ve followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I’ve included tests if applicable - [x] I’ve documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I’ve applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **Pre-merge reviewer checklist** - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] 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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > Skip handling deeplinks with no pathname or query (e.g., metamask://, link.metamask.io[/]) to prevent interstitial and signature checks; add targeted tests. > > - **Core – Deeplink handling**: > - In `app/core/DeeplinkManager/handlers/legacy/handleUniversalLink.ts`, add early return to `handled()` and skip processing when the validated URL has no pathname and no query, preventing interstitial/signature flows for barebones links. > - **Tests**: > - In `__tests__/handleUniversalLink.test.ts`: > - Import `verifySignature` namespace to spy on `hasSignature`. > - Add cases verifying skip behavior for links without path/query and that `hasSignature` is not called when skipped. > - Minor: update `describe` name to `handleUniversalLink`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2d09a02. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
#23466) ## **Description** The Perps tab on the home screen was displaying "Available balance" instead of "Total balance". Total balance includes margin locked in trades and should match the primary balance shown in the Perps home view. Changed `PerpsTabControlBar` to use `totalBalance` instead of `availableBalance` for consistency with the Perps home view. ## **Changelog** CHANGELOG entry: Fixed Perps tab to display total balance instead of available balance ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2172 ## **Manual testing steps** ```gherkin Feature: Perps tab balance display Scenario: User views total balance in Perps tab Given user has open positions in Perps with margin locked When user views the Perps tab on home screen Then the balance shown matches the total balance in Perps home view And the label reads "Total Balance" instead of "Available Balance" ``` ## **Screenshots/Recordings** ### **Before** - Label: "Available balance" - Value: Shows withdrawable funds only <img width="418" height="848" alt="image" src="https://github.com/user-attachments/assets/d49b0b18-c762-4880-a545-0ba9cf6d132f" /> ### **After** - Label: "Total Balance" - Value: Shows total account value (includes margin locked in trades) https://github.com/user-attachments/assets/c04940c0-71ba-4ce9-9a2c-9ed726f87dfc ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. ## **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. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > PerpsTabControlBar now displays and animates against `totalBalance` with updated label and tests reflecting the change. > > - **UI (PerpsTabControlBar)** > - Display `totalBalance` instead of `availableBalance` for balance pill. > - Update label to `strings('perps.total_balance')`. > - Drive balance pulse animation and zero/empty checks from `totalBalance`. > - **Tests** > - Update mocks, assertions, and edge cases to use `totalBalance`. > - Verify animations trigger on `totalBalance` changes and errors are logged. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 51afbe2. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )