Skip to content
Merged
Show file tree
Hide file tree
Changes from 205 commits
Commits
Show all changes
206 commits
Select commit Hold shift + click to select a range
eec13f3
refactor(ramp): extract useContinueWithQuote hook (Phase 4) (#29213)
saustrie-consensys Apr 23, 2026
be61dfb
fix: Fix dismissing perps modify sheet (#28888)
Cal-L Apr 23, 2026
0b114db
fix: MUSD-696 fix money hub deeplink navigation cp-7.74.0 (#29288)
Matt561 Apr 23, 2026
d495d8f
chore: use DS svg icons in token details chart (#29293)
sahar-fehri Apr 23, 2026
5a8bb05
fix: Use development profile for main dev environment (#29286)
Cal-L Apr 23, 2026
2e461bc
feat: full-page account selector and optional picker dropdown icon (#…
gantunesr Apr 23, 2026
cc1992b
feat(hw): add executeHardwareWalletOperation utility (#29085)
montelaidev Apr 24, 2026
dd60e41
fix: Rewards text refinement (#29300)
Montoya Apr 24, 2026
c2be0e3
feat: add transaction logic for veda depost and withdrawal (#28658)
MoMannn Apr 24, 2026
a99399c
test: remove toMatchSnapshot and removed snapshot files in confirmati…
cortisiko Apr 24, 2026
3d37a2f
fix: add bridge missing-price warning flow (#29250)
bfullam Apr 24, 2026
600d4b1
feat: adds haptic feedback and checkmark to quickbuy (#29279)
joaosantos15 Apr 24, 2026
abe7112
chore(rewards): no date in campaign tile for upcoming (#29311)
VGR-GIT Apr 24, 2026
0769701
fix: hide big transaction fee on Perps withdraw when no quotes availa…
dan437 Apr 24, 2026
ab0790e
feat(perps): track pay-token validation errors in analytics (#29170)
michalconsensys Apr 24, 2026
4ab229b
feat: update token details security trust designs (#29230)
sahar-fehri Apr 24, 2026
73a4e87
chore: update @metamask/transaction-pay-controller (#29302)
jpuri Apr 24, 2026
c5532e5
fix: tempo and eip 7702 txs activity remove nonce row cp-7.74.0 (#29066)
maxime-oe Apr 24, 2026
2eba124
Merge origin/main into stable-main-7.73.2
metamaskbot Apr 24, 2026
2ba3c24
chore(release): sync stable to main for version 7.73.2 (#29318)
metamaskbotv2[bot] Apr 24, 2026
e3355b5
chore(release): Bump main version to 7.76.0 (#29309)
metamaskbotv2[bot] Apr 24, 2026
9dc9557
chore: leaderboard - abbreviate large token amounts in position rows …
zone-live Apr 24, 2026
4ec2544
feat(hw): QR wallet connection ui wiring (#29086)
montelaidev Apr 24, 2026
5e07380
feat(rewards): show ondo outcome toasts (#29315)
VGR-GIT Apr 24, 2026
ddb3c81
test: remove toMatchSnapshot and removed snapshot files in notificati…
cortisiko Apr 24, 2026
e741248
test: upload Test Plan JSON file to artifacts (#29337)
sleepytanya Apr 24, 2026
b760c09
feat(deeplinks): add Swap, Rewards, Predict, Earn-musd, Shield, Trend…
baptiste-marchand Apr 24, 2026
592b39a
feat(money): card linking homepage state (MUSD-609) (#29177)
Kureev Apr 24, 2026
64e158a
chore: Combine Snaps build flags (#29320)
FrederikBolding Apr 24, 2026
70f8823
feat: Swaps new token warning modal (#29197)
infiniteflower Apr 24, 2026
dcad69f
fix(perps): replace 90% with Max button on Perps Withdraw (#29257)
dan437 Apr 24, 2026
4a0a472
fix: WalletConnect sign requests show garbled origin in 'Request from…
wenfix Apr 24, 2026
1aaf417
feat: migrate Button (perps scope) (#27870)
kirillzyusko Apr 24, 2026
726a90b
fix: prevent invalid bridge tx hashes from being persisted in txHisto…
micaelae Apr 24, 2026
764a031
ci: add separate Runway OTA and native build workflows (phase 1) cp-7…
weitingsun Apr 24, 2026
cffe1e9
test: remove toMatchSnapshot and removed snapshot files in earn tests…
cortisiko Apr 24, 2026
b6c87e7
chore: update smart account dapp requests description copy (#29211)
bschorchit Apr 24, 2026
f7de05a
test: remove toMatchSnapshot and removed snapshot files in mobile pla…
cortisiko Apr 25, 2026
4950cbc
chore(rewards): hide pending/ineligible indicators and market value o…
VGR-GIT Apr 27, 2026
d85cbd1
chore: display chain badge on position token avatars in trader profil…
zone-live Apr 27, 2026
844d6ae
chore: adds navigation to trader profile from notifications follow li…
zone-live Apr 27, 2026
ee88bd3
fix(ci): add retry logic for apt-get to prevent mirror desync failure…
alucardzom Apr 27, 2026
bac5bb9
fix(ci): add transient network error message to yarn install retry (#…
alucardzom Apr 27, 2026
890ac4a
fix(card): update feature flag listener on CardController (#29350)
Brunonascdev Apr 27, 2026
b97da6f
feat(perps/agentic): caption screenshots via per-file note sidecar (#…
abretonc7s Apr 27, 2026
3c65092
feat(card): migrate delegation methods to CardController (#29346)
Brunonascdev Apr 27, 2026
9816769
feat(predict): bPredict Bottom Sheet Errors PRED-836 (#29184)
MarioAslau Apr 27, 2026
20e81f0
feat: Skeleton migration (`assets` team) (#29051)
kirillzyusko Apr 27, 2026
cdb5720
chore: restore fail open filter logic on multichain assets controller…
sahar-fehri Apr 27, 2026
e11b558
ci(qa-stats): collect e2e_test_times per spec from JUnit artifacts (#…
racitores Apr 27, 2026
8c0fbee
feat(card): MM Card IAB redirects (Travel and ToS) and Manage Card op…
Brunonascdev Apr 27, 2026
bedd043
feat: Skeleton migration (accounts engineers) (#29057)
kirillzyusko Apr 27, 2026
fb3325d
chore: update follow button styling and add View More card to Top Tra…
zone-live Apr 27, 2026
97c9be8
test: remove toMatchSnapshot and removed snapshot files in wallet int…
cortisiko Apr 27, 2026
7e21c6e
feat(MUSD-473): Add money choice bottom sheet (#29336)
Kureev Apr 27, 2026
3ba1e2d
fix: Zip iOS .app bundles for runway bucket (#29377)
Cal-L Apr 27, 2026
43aa117
feat(analytics): rename request_platform -> remote_request_platform o…
adonesky1 Apr 27, 2026
b3f3de2
test: remove toMatchSnapshot and removed snapshot files in unassigned…
cortisiko Apr 27, 2026
9f04010
fix(ramp): keep stable action text node in build quote (#29380)
wachunei Apr 27, 2026
84c0b14
feat(hw): qr wallet consumer wiring. (#29087)
montelaidev Apr 28, 2026
c751f32
feat: add tx fees section to quickbuy (#29321)
joaosantos15 Apr 28, 2026
e98fbb5
chore: upgrade design system react native to 0.20.0 and fix breaking …
georgewrmarshall Apr 28, 2026
60e51d2
test: Run Snaps E2E on main build (#29322)
FrederikBolding Apr 28, 2026
c815a90
feat: account override changes in money account pages (#29187)
jpuri Apr 28, 2026
68c501b
chore: per trader notification bottom sheet (#28983)
zone-live Apr 28, 2026
341b6d7
ci: e2e test based sharding (#28667)
racitores Apr 28, 2026
572bf7c
feat(agentic): tidy recipe HUD + fix screenshot pipeline (#29401)
abretonc7s Apr 28, 2026
80c9261
feat: Skeleton migration (no codeowners) (#29054)
kirillzyusko Apr 28, 2026
cdbc929
chore: updates to social leaderboard (#29407)
zone-live Apr 28, 2026
262d190
feat: uses position id to render trader position page (#29403)
joaosantos15 Apr 28, 2026
0da8069
chore: money account related code refactor (#29228)
jpuri Apr 28, 2026
6806b97
fix: replace ButtonIcon with HeaderCompactStandard in AddWallet (#29349)
brianacnguyen Apr 28, 2026
f968f46
fix: Polish Top Traders filter patterns for consistency (#29392)
amandaye0h Apr 28, 2026
3111b71
fix: network fee alert for money account transactions (#29242)
jpuri Apr 28, 2026
6b4a28e
chore: refactor to use submittx (#29417)
joaosantos15 Apr 28, 2026
286b012
fix: reduce min/max amount validation flashing in build quote (#29360)
saustrie-consensys Apr 28, 2026
d641319
test: enables back GEOLOCATION when BROWSERSTACK_LOCAL is not set (#2…
christopherferreira9 Apr 28, 2026
b90b7c4
feat(social-leaderboard): top-rank decorations, skeleton alignment, c…
xavier-brochard Apr 28, 2026
35f095c
feat: TSA-473 Quickbuy Pay with SOL (#29424)
joaosantos15 Apr 28, 2026
f520430
fix: Refactor Predictions search for consistency (#29404)
amandaye0h Apr 28, 2026
04bd7b0
chore: Polish add wallet font weight for consistency (#29402)
amandaye0h Apr 28, 2026
3b93894
feat: Multichain API accounts ordering (#28763)
jiexi Apr 28, 2026
c400fda
fix: Polish Perps filter patterns on Market and Transactions screens …
amandaye0h Apr 28, 2026
9a4dc62
test: implements emulator and simulator handling for appium runs (#29…
christopherferreira9 Apr 28, 2026
c9ac514
feat: activity list changes for money account transactions (#29358)
jpuri Apr 28, 2026
9c53eb0
ci: harden Android E2E system image setup (#29375)
Qbandev Apr 28, 2026
3f86061
chore(ci): improve bundle size check (#28695)
joaoloureirop Apr 28, 2026
60f4767
test: remove toMatchSnapshot and removed snapshot files in unassigned…
cortisiko Apr 28, 2026
62ed9c6
feat: deeplinks config social ai (#29383)
Bigshmow Apr 28, 2026
b84864b
fix(bridge): normalize Polygon native token addresses cp-7.75.0 (#29…
bfullam Apr 28, 2026
4ded3bd
Merge origin/main into stable-main-7.74.0
metamaskbot Apr 28, 2026
f71aeee
feat: remove outdated enzyme test library (#29254)
adnxy Apr 28, 2026
9fc10f0
release: sync stable to main for version 7.74.0 (#29446)
metamaskbotv2[bot] Apr 28, 2026
11dad0c
feat(ramp): add Headless Host + quote-first startHeadlessBuy (Phase 5…
wachunei Apr 28, 2026
e7ec5b0
fix: Perps chart viewport breaking when revisiting a candle interval …
gambinish Apr 28, 2026
30f50eb
docs(agentic): add getting-started for first-time recipe runs (#29426)
abretonc7s Apr 28, 2026
3229357
chore: upgrade design system libraries to latest (#29449)
georgewrmarshall Apr 28, 2026
23c00fb
chore(e2e): remove already-mocked entries from mock-e2e-allowlist (#2…
chrisleewilcox Apr 29, 2026
b66bc67
chore: Use AWS signing config for main-dev (#29430)
Cal-L Apr 29, 2026
984c62e
fix: polish top trader cards, skeleton alignment, and navigation (#29…
xavier-brochard Apr 29, 2026
0e8a00a
chore: bump assets controllers 105 and resolve breaking changes (#29421)
bergarces Apr 29, 2026
c6dac8b
fix: money account deposit page throwing error (#29456)
jpuri Apr 29, 2026
0d2d04a
feat: 1m default for position view (#29452)
Bigshmow Apr 29, 2026
3b75214
feat(social-ai): add haptic feedback to follow & top traders surfaces…
xavier-brochard Apr 29, 2026
5977842
chore: cp-7.75.0 bump `@metamask/transaction-pay-controller` to `20.0…
matthewwalsh0 Apr 29, 2026
2649efe
feat: smart default source token selection (TSA-472) (#29472)
joaosantos15 Apr 29, 2026
fcb5aa8
feat(predict): support multi-market sports events via parent/child ev…
caieu Apr 29, 2026
515537b
chore: Follow-trading-quick-buy-style-fixes (#29476)
xavier-brochard Apr 29, 2026
770afdb
feat(rewards): ondo campaign end-of-campaign UI (#29413)
VGR-GIT Apr 29, 2026
edaf5b3
fix(confirmations): prevent Perps withdraw clipping on Android cp-7.7…
dan437 Apr 29, 2026
518ca09
chore(rewards): campaign tile upcoming show date conditionally (#29469)
VGR-GIT Apr 29, 2026
695e7eb
fix: add timeouts and cleanup to ledger adapter (#29367)
montelaidev Apr 29, 2026
3ebc318
feat: Implement haptic feedback improvements and new haptics rules (#…
PatrykLucka Apr 29, 2026
3060026
test: Mmqa disablei os performance tests (#29369)
javiergarciavera Apr 29, 2026
18fbd1e
fix: Polish Money activity filters for consistency (#29463)
amandaye0h Apr 29, 2026
6a1a1b3
fix: Polish Transactions activity filters for consistency (#29462)
amandaye0h Apr 29, 2026
fb31cde
fix(predict): normalize live game score ordering (#29453)
matallui Apr 29, 2026
8ae642f
perf(accessibility): fix iOS accessibility in Earn and Stake componen…
javiergarciavera Apr 29, 2026
12b56e7
fix: remove large push notification icon from Braze configuration (#2…
baptiste-marchand Apr 29, 2026
1ea1c34
fix: Refactor Trending search pattern for consistency (#29400)
amandaye0h Apr 29, 2026
2c4a9b2
fix(ramp): suppress stale provider quote error flash in build quote (…
saustrie-consensys Apr 29, 2026
e0f54ea
chore: New Crowdin Translations by GitHub Action cp-7.75.0 (#29299)
metamaskbotv2[bot] Apr 29, 2026
cbc0a40
fix: Polish Explore filters, search and section patterns for consiste…
amandaye0h Apr 29, 2026
8f1f8c3
feat: introduce bigint (#29075)
weitingsun Apr 29, 2026
166a137
chore: remove core-backend resolution (#29488)
n3ps Apr 29, 2026
1b15a57
fix: hide interim processing messages for providers (#29131)
amitabh94 Apr 29, 2026
5d215da
fix(card): require Linea funding before Cashback redemption (#29489)
Brunonascdev Apr 29, 2026
e1f92e1
refactor(card): remove dead hooks, routes, and unused CardSDK surface…
Brunonascdev Apr 29, 2026
a52bfa4
fix: fixed lending empty state rendering for unsupported asset like L…
Matt561 Apr 29, 2026
7b749d4
ci: add automated E2E readiness label and CI checks - Part1 (#29305)
jvbriones Apr 29, 2026
aa1b41c
fix(e2e): fix mock matchers for bridge, dapp-scanning, and hyperliqui…
chrisleewilcox Apr 29, 2026
be0e59e
feat(confirmations): support Predict pUSD token (#29450)
matallui Apr 29, 2026
8c3ec8d
chore(predict): track success and error for pwat (#29512)
caieu Apr 29, 2026
cff2ccf
feat: added developer options button to clear dismissed mUSD conversi…
Matt561 Apr 29, 2026
6a8ec58
ci: fix `get-requirements.yml` checks for `pull_request` events (#29528)
Gudahtt Apr 29, 2026
4e11714
ci: switch OTA hotfix release branch to `-ota` suffix convention (#29…
weitingsun Apr 29, 2026
d2f250f
perf(accessibility): fix iOS accessibility in shared components for p…
javiergarciavera Apr 30, 2026
e1c851c
fix(rewards): leaderboard split view (#29500)
sophieqgu Apr 30, 2026
3cb5e1b
chore: add buy/sell trade markers to trader position chart (#29478)
zone-live Apr 30, 2026
39a644c
chore: Bump `snaps-controllers` (#29486)
FrederikBolding Apr 30, 2026
9656906
ci: fix scheduled e2e runs (#29539)
jvbriones Apr 30, 2026
7fded83
fix(bridge): hide sponsored label on cross-chain bridge with insuffic…
Battambang Apr 30, 2026
e717be3
feat: track token_security_type_destination in metrics (#29381)
infiniteflower Apr 30, 2026
51b6bbd
feat(rewards): add targeted Sentry capture for rewards auth errors (#…
VGR-GIT Apr 30, 2026
da5ca97
test: fix missing mock (#29549)
christopherferreira9 Apr 30, 2026
2559cc5
test: e2e labels rename and shards update (#29431)
racitores Apr 30, 2026
f3543d4
perf(accessibility): fix iOS accessibility in Ramp components (#29126)
javiergarciavera Apr 30, 2026
bf41fc1
fix(card): initialize spending limit from saved allowance (#29517)
Brunonascdev Apr 30, 2026
7ee90a3
test: remove toMatchSnapshot and removed snapshot files in unassigned…
cortisiko Apr 30, 2026
9ebc68b
chore: QA and bug fixes from dry run apr 29 (#29519)
Bigshmow Apr 30, 2026
f1e07d4
feat: Enable mUSD conversion flow for hardware wallet accounts (#29418)
OGPoyraz Apr 30, 2026
576cfe3
feat: Accounts Metrics (#29015)
owencraston Apr 30, 2026
73c7365
feat(predict): Add A/B Test Analytics Instrumentation: Bet Slip + Pay…
MarioAslau Apr 30, 2026
d219263
fix: Refine Perps section and empty state patterns to match Home and …
amandaye0h Apr 30, 2026
1df1236
feat: money account transaction - add default value for accountOverri…
jpuri Apr 30, 2026
60ef9e4
test: mock accounts v4 transactions endpoint (#29569)
n3ps Apr 30, 2026
a215e66
chore: enable swaps asset picker security tags (#29570)
infiniteflower Apr 30, 2026
9b373fe
feat(predict): Add Funds / Change Payment Method CTA (#29461)
MarioAslau Apr 30, 2026
d32d6ea
fix: percentage buttons for money account withdraw (#29339)
jpuri Apr 30, 2026
37c8162
feat: add token list security badges (#29509)
sahar-fehri Apr 30, 2026
2b5fd98
feat: add Tempo chain as additionnal network (#29515)
maxime-oe Apr 30, 2026
8cdc767
fix(card): preserve Card Home data during refresh (#29513)
Brunonascdev Apr 30, 2026
4f4f756
fix(perps): limit price percentage buttons now compound on current pr…
abretonc7s Apr 30, 2026
a654e01
chore(runway): cherry-pick chore: pass cached security data from toke…
runway-github[bot] May 4, 2026
da00a43
[skip ci] Bump version number to 4775
metamaskbot May 4, 2026
0e2e500
chore(runway): cherry-pick test: unblock CI (#29656)
runway-github[bot] May 4, 2026
5f21b3c
[skip ci] Bump version number to 4780
metamaskbot May 4, 2026
92f70c1
chore(runway): cherry-pick feat: auto slippage support for RWA tokens…
runway-github[bot] May 4, 2026
5e58e19
[skip ci] Bump version number to 4786
metamaskbot May 4, 2026
d640aa8
chore(runway): cherry-pick ci: skip smart e2e ai selection for cherry…
runway-github[bot] May 4, 2026
019d626
[skip ci] Bump version number to 4791
metamaskbot May 4, 2026
f438a52
chore(runway): cherry-pick test: adds mock for CLOB auth in predictio…
runway-github[bot] May 5, 2026
f0664ea
[skip ci] Bump version number to 4797
metamaskbot May 5, 2026
9bd7c1e
chore(runway): cherry-pick feat(perps): force unified account (#29714)
runway-github[bot] May 5, 2026
7b99698
[skip ci] Bump version number to 4798
metamaskbot May 5, 2026
cb69837
chore(runway): cherry-pick chore: bump axios to 1.15.1 (#29719)
runway-github[bot] May 5, 2026
8676634
[skip ci] Bump version number to 4801
metamaskbot May 5, 2026
38d122b
chore(runway): cherry-pick test: add automated build environment disp…
runway-github[bot] May 5, 2026
643dc94
chore(runway): cherry-pick fix(BETR-413): pass originalTransactionId …
runway-github[bot] May 5, 2026
aeb0da4
[skip ci] Bump version number to 4803
metamaskbot May 5, 2026
edbdd5d
chore(runway): cherry-pick fix: MUSD-771 updated selectAccountTokensA…
runway-github[bot] May 6, 2026
14e7dee
[skip ci] Bump version number to 4814
metamaskbot May 6, 2026
a0ea6e4
chore(runway): cherry-pick chore: add advanced charts traces cp-7.76.…
runway-github[bot] May 6, 2026
f2bf25a
[skip ci] Bump version number to 4825
metamaskbot May 6, 2026
1282862
chore(runway): cherry-pick fix: validate type of security data in tok…
runway-github[bot] May 6, 2026
cc0b6b0
[skip ci] Bump version number to 4826
metamaskbot May 6, 2026
cc932b3
chore(runway): cherry-pick feat(predict): remove CLOB v1 support and …
runway-github[bot] May 6, 2026
6bd172e
[skip ci] Bump version number to 4829
metamaskbot May 6, 2026
da7eaaa
fix(Rewards): Ondo campaign text issues cp-7.76.0 (#29815) (#29832)
Montoya May 7, 2026
4477f76
[skip ci] Bump version number to 4836
metamaskbot May 7, 2026
fcddd41
chore: stable-sync 7.75.1 into release/7.76.0 (#29822)
chloeYue May 7, 2026
e5f9117
[skip ci] Bump version number to 4843
metamaskbot May 7, 2026
0f5e5a5
Merge stable into release/7.76.0 (ancestry fix after squash of #29822)
chloeYue May 7, 2026
eb04a9c
[skip ci] Bump version number to 4844
metamaskbot May 7, 2026
1d19688
chore(release): release-changelog/7.76.0 (#29850)
chloeYue May 7, 2026
2537f38
[skip ci] Bump version number to 4845
metamaskbot May 7, 2026
a06a359
[skip ci] Bump version number to 4850
metamaskbot May 7, 2026
28b7e89
chore(runway): cherry-pick fix(Rewards): error when visiting rewards …
runway-github[bot] May 7, 2026
af1dfef
[skip ci] Bump version number to 4851
metamaskbot May 7, 2026
029e41e
[skip ci] Bump version number to 4852
metamaskbot May 7, 2026
a9b5205
[skip ci] Bump version number to 4853
metamaskbot May 7, 2026
a5ae0c9
[skip ci] Bump version number to 4858
metamaskbot May 7, 2026
31425df
chore: trigger CI
chloeYue May 8, 2026
2ac59a3
[skip ci] Bump version number to 4866
metamaskbot May 8, 2026
b7c4322
chore: trigger CI
chloeYue May 8, 2026
f85ecc4
ci: re-enable CI on PRs targeting stable cp-7.76.0 (#29986)
chloeYue May 12, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .agents/skills/e2e-test/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ Do not read the full reference files until the decision tree or workflow sends y
5. **Never use `TestHelpers.delay()`** — use `Assertions.*` which has auto-retry
6. **Use `FixtureBuilder` for state** — do not set state through UI interactions
7. **Selectors live in `*.testIds.ts`** (co-located) or `tests/selectors/` (legacy)
8. **Tag correctly** — Use the tag that matches your feature and test type. Options include `SmokeE2E`, `SmokeTrade`, `SmokePredictions`, `SmokePerps`, `SmokeConfirmations`, `RegressionTrade`, `RegressionWallet`, etc. Check **`tests/tags.js`** for the full list and descriptions, and **existing specs in the same feature folder** to see which tag they use.
8. **Tag correctly** — Use the tag that matches your feature and test type. Options include `SmokeE2E`, `SmokeSwap`, `SmokeStake`, `SmokeMoney`, `SmokePredictions`, `SmokePerps`, `SmokeConfirmations`, `RegressionTrade`, `RegressionWallet`, etc. Check **`tests/tags.js`** for the full list and descriptions, and **existing specs in the same feature folder** to see which tag they use.
9. **Descriptive test names** — no 'should' prefix (e.g., `'opens market details'`)
10. **Fix lint/tsc before running** — never run with known errors

Expand Down
10 changes: 5 additions & 5 deletions .agents/skills/e2e-test/references/writing-tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

## Spec File Location

| Test Type | Directory | Tag |
| ---------- | ------------------------------------------- | -------------------------------------------------------------------------------------- |
| Smoke | `tests/smoke/<feature>/<name>.spec.ts` | `SmokeE2E`, `SmokeTrade`, `SmokePredictions`, `SmokePerps`, `SmokeConfirmations`, etc. |
| Regression | `tests/regression/<feature>/<name>.spec.ts` | `RegressionTrade`, `RegressionWallet`, etc. |
| Test Type | Directory | Tag |
| ---------- | ------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Smoke | `tests/smoke/<feature>/<name>.spec.ts` | `SmokeE2E`, `SmokeSwap`, `SmokeStake`, `SmokeMoney`, `SmokePredictions`, `SmokePerps`, `SmokeConfirmations`, etc. |
| Regression | `tests/regression/<feature>/<name>.spec.ts` | `RegressionTrade`, `RegressionWallet`, etc. |

Import tags from `tests/tags.ts`. Check **`tests/tags.js`** for the full list and descriptions. Use the same tag as **existing specs in that feature folder** (e.g. `tests/smoke/predict/` uses `SmokeTrade`).
Import tags from `tests/tags.ts`. Check **`tests/tags.js`** for the full list and descriptions. Use the same tag as **existing specs in that feature folder** (e.g. `tests/smoke/swap/` uses `SmokeSwap`, `tests/smoke/stake/` uses `SmokeStake`, `tests/smoke/card/` and `tests/smoke/ramps/` use `SmokeMoney`).

## Minimal Smoke Spec

Expand Down
2 changes: 2 additions & 0 deletions .depcheckrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,8 @@ ignores:
- '@types/react-test-renderer'
# runtime for dependecies using Nitro Modules (@metamask/native-utils)
- 'react-native-nitro-modules'
# Jest `jest.mock('react-native-worklets', …, { virtual: true })` in testSetup only; not a root dependency
- 'react-native-worklets'

# Used in Yarn plugin for preview builds
- '@yarnpkg/core'
6 changes: 6 additions & 0 deletions .e2e.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ export PREBUILT_IOS_APP_PATH='build/MetaMask.app'
export PREBUILT_ANDROID_APK_PATH='build/MetaMask.apk'
export PREBUILT_ANDROID_TEST_APK_PATH='build/MetaMask-Test.apk'

# Playwright local emulator (EmulatorProvider): when use.app.buildPath is set, global setup
# normally runs adb / simctl uninstall+install. Set to true to skip that (e.g. faster iteration).
# true | 1 | yes = skip reinstall. false | 0 | no | unset = reinstall (default).
# export SKIP_APP_REINSTALL=true
export SKIP_APP_REINSTALL=false

export TEST_SRP_1=
export TEST_SRP_2=
export TEST_SRP_3=
Expand Down
17 changes: 16 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -467,17 +467,32 @@ module.exports = {
},
{
files: ['app/**/*.{ts,tsx}'],
excludedFiles: ['app/controllers/perps/**/*.{ts,tsx}'],
excludedFiles: [
'app/controllers/perps/**/*.{ts,tsx}',
'app/util/haptics/**/*.{ts,tsx}',
],
rules: {
'no-restricted-imports': [
'error',
{
paths: [
{
name: 'expo-haptics',
message:
'Import from app/util/haptics instead of expo-haptics directly.',
},
],
patterns: [
{
group: ['**/controllers/perps', '**/controllers/perps/**'],
message:
'Use @metamask/perps-controller instead of relative imports into app/controllers/perps/.',
},
{
group: ['expo-haptics/*'],
message:
'Import from app/util/haptics instead of expo-haptics directly.',
},
],
},
],
Expand Down
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -336,7 +336,7 @@ tests/websocket/ @MetaMask/qa
# QA Team - CI
.github/actions/smart-e2e-selection/ @MetaMask/qa
.github/workflows/ai-pr-risk-analysis.yml @MetaMask/qa
.github/workflows/needs-e2e-build.yml @MetaMask/qa
.github/workflows/auto-label-not-ready-for-e2e.yml @MetaMask/qa
.github/workflows/run-e2e-workflow.yml @MetaMask/qa
.github/workflows/run-e2e-api-specs.yml @MetaMask/qa
.github/workflows/run-e2e-regression-tests-android.yml @MetaMask/qa
Expand Down
115 changes: 93 additions & 22 deletions .github/actions/setup-e2e-env/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,56 +113,126 @@ runs:
distribution: ${{ inputs.jdk-distribution }}

- name: Install required emulator dependencies
if: ${{ inputs.platform == 'android' && runner.os == 'Linux' }}
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' && runner.os == 'Linux' }}
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 #v3.0.2
with:
timeout_minutes: 3
max_attempts: 3
retry_wait_seconds: 30
on_retry_command: sudo apt-get clean
command: |
set -euo pipefail
sudo apt-get -o DPkg::Lock::Timeout=120 update
sudo apt-get -o DPkg::Lock::Timeout=120 install -y \
libpulse0 \
libglu1-mesa \
libnss3 \
libxss1
echo "✅ Linux dependencies installed successfully"

## Android System Image Setup (only when simulator/emulator is needed)

# Prepare SDK directories for cache restore
- name: Prepare Android SDK directories for cache
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }}
env:
CACHE_PATH: /opt/android-sdk/system-images/android-${{ inputs.android-api-level }}/${{ inputs.android-tag }}/${{ inputs.android-abi }}
run: |
sudo apt-get update
sudo apt-get install -y \
libpulse0 \
libglu1-mesa \
libnss3 \
libxss1

echo "✅ Linux dependencies installed successfully"
set -euo pipefail
sudo mkdir -p "$CACHE_PATH" /opt/android-sdk/.temp
sudo chown -R "$(id -u):$(id -g)" "$CACHE_PATH" /opt/android-sdk/.temp
shell: bash

## Android SDK Setup (SDK pre-installed in container)
# Restore exact system image from cache
- name: Restore Android system image from cache
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }}
id: android-system-image-cache
uses: actions/cache/restore@v4
with:
path: /opt/android-sdk/system-images/android-${{ inputs.android-api-level }}/${{ inputs.android-tag }}/${{ inputs.android-abi }}
key: android-system-image-v1-${{ runner.os }}-api${{ inputs.android-api-level }}-${{ inputs.android-tag }}-${{ inputs.android-abi }}

- name: Install additional Android SDK components if needed
if: ${{ inputs.platform == 'android' && (inputs.android-api-level != '34' || inputs.android-abi != 'x86_64') }}
# Install the requested system image with retry and cleanup
- name: Prepare Android system image
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }}
id: prepare-android-system-image
env:
ANDROID_API_LEVEL: ${{ inputs.android-api-level }}
ANDROID_TAG: ${{ inputs.android-tag }}
ANDROID_ABI: ${{ inputs.android-abi }}
run: |
IMAGE="system-images;android-$ANDROID_API_LEVEL;google_apis;$ANDROID_ABI"
echo "Installing additional system image: $IMAGE"
echo "y" | "/opt/android-sdk/cmdline-tools/latest/bin/sdkmanager" "$IMAGE"
set -euo pipefail
SDKMANAGER="/opt/android-sdk/cmdline-tools/latest/bin/sdkmanager"
IMAGE_PACKAGE="system-images;android-$ANDROID_API_LEVEL;$ANDROID_TAG;$ANDROID_ABI"
IMAGE_DIR="/opt/android-sdk/system-images/android-$ANDROID_API_LEVEL/$ANDROID_TAG/$ANDROID_ABI"

if [ -f "$IMAGE_DIR/package.xml" ] || [ -f "$IMAGE_DIR/source.properties" ]; then
echo "System image already installed: $IMAGE_PACKAGE"
echo "image-package=$IMAGE_PACKAGE" >> "$GITHUB_OUTPUT"
exit 0
fi

for attempt in 1 2 3; do
echo "Installing system image (attempt $attempt/3): $IMAGE_PACKAGE"
if echo "y" | "$SDKMANAGER" "$IMAGE_PACKAGE" 2>&1; then
if [ -f "$IMAGE_DIR/package.xml" ] || [ -f "$IMAGE_DIR/source.properties" ]; then
echo "image-package=$IMAGE_PACKAGE" >> "$GITHUB_OUTPUT"
exit 0
fi
else
find /opt/android-sdk/.temp -type f -name '*.zip' -exec unzip -t {} \; || true
fi
rm -rf "$IMAGE_DIR"
find /opt/android-sdk/.temp -mindepth 1 -maxdepth 1 -exec rm -rf -- {} + || true
sleep 10
done

echo "::error::Failed to install Android system image: $IMAGE_PACKAGE"
exit 1
shell: bash

## Launch AVD
# Save system image cache (only on trusted refs, only if no cache hit)
- name: Save Android system image to cache
if: >-
${{
inputs.platform == 'android' &&
inputs.setup-simulator == 'true' &&
steps.android-system-image-cache.outputs.cache-hit != 'true' &&
github.event_name != 'pull_request' &&
github.event_name != 'pull_request_target' &&
github.event_name != 'merge_group' &&
github.ref == 'refs/heads/main'
}}
uses: actions/cache/save@v4
with:
path: /opt/android-sdk/system-images/android-${{ inputs.android-api-level }}/${{ inputs.android-tag }}/${{ inputs.android-abi }}
key: android-system-image-v1-${{ runner.os }}-api${{ inputs.android-api-level }}-${{ inputs.android-tag }}-${{ inputs.android-abi }}

## Launch AVD (only when simulator/emulator is needed)

- name: Set ANDROID_AVD_HOME for downstream steps
if: ${{ inputs.platform == 'android'}}
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }}
shell: bash
run: |
echo "ANDROID_AVD_HOME=$HOME/.android/avd" >> "$GITHUB_ENV"
mkdir -p "$HOME/.android/avd"

- name: Create Android Virtual Device (AVD)
if: ${{ inputs.platform == 'android'}}
if: ${{ inputs.platform == 'android' && inputs.setup-simulator == 'true' }}
env:
ANDROID_API_LEVEL: ${{ inputs.android-api-level }}
ANDROID_TAG: ${{ inputs.android-tag }}
ANDROID_ABI: ${{ inputs.android-abi }}
ANDROID_AVD_NAME: ${{ inputs.android-avd-name }}
ANDROID_DEVICE: ${{ inputs.android-device }}
ANDROID_SDCARD_SIZE: ${{ inputs.android-sdcard-size }}
IMAGE_PACKAGE: ${{ steps.prepare-android-system-image.outputs.image-package }}
run: |
IMAGE="system-images;android-$ANDROID_API_LEVEL;$ANDROID_TAG;$ANDROID_ABI"
echo "Creating AVD with image: $IMAGE"
set -euo pipefail
echo "Creating AVD with image: $IMAGE_PACKAGE"
"/opt/android-sdk/cmdline-tools/latest/bin/avdmanager" --verbose create avd \
--force \
--name "$ANDROID_AVD_NAME" \
--package "$IMAGE" \
--package "$IMAGE_PACKAGE" \
--device "$ANDROID_DEVICE" \
--tag "$ANDROID_TAG" \
--abi "$ANDROID_ABI" \
Expand Down Expand Up @@ -220,6 +290,7 @@ runs:
timeout_minutes: 15
max_attempts: 3
retry_wait_seconds: 30
on_retry_command: echo "⚠️ yarn install failed — likely a transient network issue on the self-hosted runner. Retrying..."
command: yarn install --immutable
env:
NODE_OPTIONS: --max-old-space-size=4096
Expand Down
Loading
Loading