Skip to content

Commit e743a09

Browse files
committed
Merge branch 'conf_page_design_update' of https://github.com/MetaMask/metamask-mobile into conf_page_design_update
2 parents e2fa747 + 45312e6 commit e743a09

372 files changed

Lines changed: 19623 additions & 17705 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.cursor/worktrees.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"setup-worktree": [
3+
"cp $ROOT_WORKTREE_PATH/.js.env .js.env",
4+
"cp $ROOT_WORKTREE_PATH/.ios.env .ios.env",
5+
"cp $ROOT_WORKTREE_PATH/.android.env .android.env",
6+
"cp $ROOT_WORKTREE_PATH/.e2e.env .e2e.env",
7+
"cp -r $ROOT_WORKTREE_PATH/.cursor/plans .cursor/plans"
8+
]
9+
}

.e2e.env.example

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,18 @@ export TEST_SRP_2=
2727
export TEST_SRP_3=
2828
export BROWSERSTACK_USERNAME=
2929
export BROWSERSTACK_ACCESS_KEY=
30+
31+
# Appwright performance -> Sentry instrumentation
32+
# If E2E_PERFORMANCE_SENTRY_DSN is defined, each scenario uploads timers to Sentry.
33+
export E2E_PERFORMANCE_SENTRY_DSN=
34+
# Optional. Set to false to disable upload even when DSN is present.
35+
export E2E_PERFORMANCE_SENTRY_ENABLED=true
36+
# Optional sample rate between 0 and 1 (default: 1).
37+
export E2E_PERFORMANCE_SENTRY_SAMPLE_RATE=1
38+
# Optional metadata for Sentry events.
39+
export E2E_PERFORMANCE_SENTRY_ENVIRONMENT=e2e-performance
40+
export E2E_PERFORMANCE_SENTRY_RELEASE=
41+
3042
# Set BROWSERSTACK_LOCAL=true when using run-appwright:mm-connect-android-bs-local (BrowserStack Local tunnel)
3143
# BROWSERSTACK_LOCAL=true
3244
export SEEDLESS_ONBOARDING_ENABLED=

.github/CODEOWNERS

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,11 @@ app/selectors/rampsController @MetaMask/ramp
7070
**/ramps/** @MetaMask/ramp
7171

7272
# Card Team
73-
app/components/UI/Card/ @MetaMask/card
74-
app/core/redux/slices/card/ @MetaMask/card
73+
app/components/UI/Card/ @MetaMask/card
74+
app/core/redux/slices/card/ @MetaMask/card
75+
app/core/Engine/controllers/card-controller @MetaMask/card
76+
app/core/Engine/messengers/card-controller-messenger @MetaMask/card
77+
app/selectors/cardController.ts @MetaMask/card
7578

7679
# Confirmation Team
7780
app/components/Views/confirmations @MetaMask/confirmations

.github/workflows/performance-test-runner.yml

Lines changed: 50 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ on:
3131
required: true
3232
type: string
3333
description: 'Unified BrowserStack build name for all sessions'
34+
sentry_target:
35+
required: false
36+
type: string
37+
default: test
38+
description: 'Sentry DSN target: test or real'
3439
secrets:
3540
BROWSERSTACK_USERNAME:
3641
required: true
@@ -46,6 +51,10 @@ on:
4651
required: true
4752
E2E_PASSWORD:
4853
required: true
54+
MM_SENTRY_DSN_TEST:
55+
required: false
56+
MM_SENTRY_DSN:
57+
required: false
4958

5059
jobs:
5160
run-tests:
@@ -58,7 +67,7 @@ jobs:
5867
steps:
5968
- name: Checkout code
6069
uses: actions/checkout@v4
61-
70+
6271
- name: Restore node_modules cache
6372
id: cache
6473
uses: actions/cache@v4
@@ -70,13 +79,12 @@ jobs:
7079
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
7180
restore-keys: |
7281
${{ runner.os }}-yarn-
73-
82+
7483
- name: Set up Node.js
7584
uses: actions/setup-node@v4
7685
with:
7786
node-version-file: '.nvmrc'
7887
cache: 'yarn'
79-
8088

8189
- name: Install dependencies
8290
uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 #v3.0.2
@@ -85,8 +93,7 @@ jobs:
8593
max_attempts: 3
8694
retry_wait_seconds: 30
8795
command: yarn --immutable
88-
## This installs dependencies and creates the node_modules state file
89-
96+
## This installs dependencies and creates the node_modules state file
9097
- name: Restore .metamask folder
9198
id: restore-metamask
9299
uses: actions/cache@v4
@@ -101,7 +108,7 @@ jobs:
101108
run: yarn setup:github-ci
102109
working-directory: '.'
103110
## This will apply the patches for appwright
104-
111+
105112
- name: BrowserStack Env Setup
106113
uses: browserstack/github-actions/setup-env@4478e16186f38e5be07721931642e65a028713c3
107114
with:
@@ -133,26 +140,52 @@ jobs:
133140
# Use same args for all build types. Do not use --include-hosts for mm-connect:
134141
# bs-local.com requests must be forwarded to localhost; --include-hosts can block them.
135142
local-args: '--force-local --verbose'
136-
143+
137144
- name: Wait for BrowserStack Local
138145
run: |
139146
echo "Waiting for BrowserStack Local to be ready..."
140147
# mm-connect needs the tunnel ready so the device can reach bs-local.com:8090; allow extra time
141148
sleep ${{ inputs.build_type == 'mm-connect' && 15 || 10 }}
142149
echo "BrowserStack Local should be ready now"
143-
150+
144151
- name: Set Test Environment
145152
run: |
146153
echo "Setting ${{ inputs.build_type }} test environment for device: ${{ matrix.device.name }} (${{ matrix.device.category }} Class)"
147154
echo "OS Version: ${{ matrix.device.os_version }}"
148155
echo "Platform: ${{ inputs.platform }}"
149-
156+
157+
SENTRY_TARGET="${{ inputs.sentry_target }}"
158+
SENTRY_TEST_DSN="${{ secrets.MM_SENTRY_DSN_TEST }}"
159+
SENTRY_REAL_DSN="${{ secrets.MM_SENTRY_DSN }}"
160+
SELECTED_SENTRY_DSN=""
161+
SENTRY_ENVIRONMENT="github-actions-performance-e2e"
162+
150163
# Validate that we have a BrowserStack URL
151164
if [ -z "${{ inputs.browserstack_app_url }}" ]; then
152165
echo "❌ Error: No ${{ inputs.platform }} BrowserStack URL available"
153166
exit 1
154167
fi
155-
168+
169+
case "$SENTRY_TARGET" in
170+
real)
171+
SELECTED_SENTRY_DSN="$SENTRY_REAL_DSN"
172+
SENTRY_ENVIRONMENT="github-actions-performance-e2e-real"
173+
if [ -z "$SELECTED_SENTRY_DSN" ]; then
174+
echo "⚠️ MM_SENTRY_DSN is empty. Sentry uploads will be skipped."
175+
fi
176+
;;
177+
test)
178+
SELECTED_SENTRY_DSN="$SENTRY_TEST_DSN"
179+
if [ -z "$SELECTED_SENTRY_DSN" ]; then
180+
echo "⚠️ MM_SENTRY_DSN_TEST is empty. Sentry uploads will be skipped."
181+
fi
182+
;;
183+
*)
184+
echo "❌ Invalid sentry_target '$SENTRY_TARGET'. Expected 'test' or 'real'."
185+
exit 1
186+
;;
187+
esac
188+
156189
{
157190
echo "BROWSERSTACK_DEVICE=${{ matrix.device.name }}"
158191
echo "BROWSERSTACK_OS_VERSION=${{ matrix.device.os_version }}"
@@ -167,9 +200,12 @@ jobs:
167200
echo "TEST_SRP_2=${{ secrets.TEST_SRP_2 }}"
168201
echo "TEST_SRP_3=${{ secrets.TEST_SRP_3 }}"
169202
echo "E2E_PASSWORD=${{ secrets.E2E_PASSWORD }}"
203+
echo "E2E_PERFORMANCE_SENTRY_DSN=$SELECTED_SENTRY_DSN"
204+
echo "E2E_PERFORMANCE_SENTRY_ENVIRONMENT=$SENTRY_ENVIRONMENT"
205+
echo "E2E_PERFORMANCE_SENTRY_RELEASE=${{ github.sha }}"
170206
echo "DISABLE_VIDEO_DOWNLOAD=true"
171207
} >> "$GITHUB_ENV"
172-
208+
173209
- name: Run Tests
174210
env:
175211
BROWSERSTACK_LOCAL: 'true'
@@ -183,7 +219,7 @@ jobs:
183219
echo "BrowserStack App URL: ${{ inputs.browserstack_app_url }}"
184220
echo "QA App Version: ${{ inputs.app_version }}"
185221
echo "BrowserStack Build Name: $BROWSERSTACK_BUILD_NAME"
186-
222+
187223
# Run the appropriate test command based on build_type flag
188224
if [ "${{ inputs.build_type }}" = "onboarding" ]; then
189225
yarn run-appwright:${{ inputs.platform }}-onboarding-bs
@@ -192,9 +228,9 @@ jobs:
192228
else
193229
yarn run-appwright:${{ inputs.platform }}-bs
194230
fi
195-
231+
196232
echo "✅ ${{ inputs.build_type }} tests completed for ${{ inputs.platform }} on ${{ matrix.device.name }}"
197-
233+
198234
- name: Upload Test Results
199235
uses: actions/upload-artifact@v4
200236
if: always()

.github/workflows/push-eas-update.yml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,23 @@ env:
5151
OTA_PUSH_PLATFORM: ${{ inputs.platform }}
5252

5353
jobs:
54+
ota-summary:
55+
name: OTA Update Summary
56+
runs-on: ubuntu-latest
57+
steps:
58+
- name: Display OTA Summary
59+
run: |
60+
{
61+
echo "### OTA Update Summary"
62+
echo ""
63+
echo "| Field | Value |"
64+
echo "| --- | --- |"
65+
echo "| **Update version** | ${UPDATE_MESSAGE} |"
66+
echo "| **Target version** | ${BASE_BRANCH_REF} |"
67+
echo "| **Environment** | ${TARGET_CHANNEL} |"
68+
echo "| **Target commit** | ${TARGET_COMMIT_HASH} |"
69+
} >> "$GITHUB_STEP_SUMMARY"
70+
5471
setup-dependencies:
5572
name: Setup Dependencies (PR)
5673
needs:

.github/workflows/run-performance-e2e-experimental.yml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,17 @@
33
name: Performance E2E Tests for Experimental Builds
44
on:
55
schedule:
6-
- cron: '0 */3 * * 1-6' # Every 3 hours, Mon–Fri (aligned with main performance workflow)
6+
- cron: '0 */3 * * 1-6' # Every 3 hours, Mon–Fri (aligned with main performance workflow)
77
workflow_dispatch:
8+
inputs:
9+
sentry_target:
10+
description: 'Sentry target for performance events (test or real)'
11+
required: false
12+
type: choice
13+
options:
14+
- test
15+
- real
16+
default: test
817
push:
918
branches:
1019
- main
@@ -53,4 +62,5 @@ jobs:
5362
with:
5463
branch_name: main
5564
build_variant: exp
65+
sentry_target: ${{ inputs.sentry_target || 'test' }}
5666
secrets: inherit

.github/workflows/run-performance-e2e-release.yml

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
11
name: Performance E2E Tests for Release Builds
22
on:
33
schedule:
4-
- cron: '*/30 * * * *' # Every 30 minutes to check for metamaskbot commits
4+
- cron: '*/30 * * * *' # Every 30 minutes to check for metamaskbot commits
55
workflow_dispatch:
6+
inputs:
7+
sentry_target:
8+
description: 'Sentry target for performance events (test or real)'
9+
required: false
10+
type: choice
11+
options:
12+
- test
13+
- real
14+
default: test
615
push:
716
branches:
817
- 'release/*'
@@ -24,7 +33,7 @@ jobs:
2433
uses: actions/checkout@v4
2534
with:
2635
fetch-depth: 0
27-
36+
2837
- name: Check release trigger conditions
2938
id: check
3039
run: |
@@ -79,4 +88,6 @@ jobs:
7988
uses: ./.github/workflows/run-performance-e2e.yml
8089
needs: [check-release-trigger]
8190
if: needs.check-release-trigger.outputs.should-run == 'true'
91+
with:
92+
sentry_target: ${{ inputs.sentry_target || 'test' }}
8293
secrets: inherit

.github/workflows/run-performance-e2e.yml

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,14 @@ on:
1515
description: 'Optional description for this test run'
1616
required: false
1717
type: string
18+
sentry_target:
19+
description: 'Sentry target for performance events (test or real)'
20+
required: false
21+
type: choice
22+
options:
23+
- test
24+
- real
25+
default: test
1826

1927
browserstack_app_url_android_onboarding:
2028
description: 'BrowserStack Android Onboarding App URL (bs://...)'
@@ -38,6 +46,11 @@ on:
3846
description: 'Optional description for this test run'
3947
required: false
4048
type: string
49+
sentry_target:
50+
description: 'Sentry target for performance events (test or real)'
51+
required: false
52+
type: string
53+
default: test
4154

4255
browserstack_app_url_android_onboarding:
4356
description: 'BrowserStack Android Onboarding App URL (bs://...)'
@@ -210,11 +223,18 @@ jobs:
210223
run-android-onboarding-tests:
211224
name: Run Android Onboarding Tests
212225
uses: ./.github/workflows/performance-test-runner.yml
213-
needs: [read-device-matrix, trigger-android-dual-versions, set-build-names, determine-branch-name]
226+
needs:
227+
[
228+
read-device-matrix,
229+
trigger-android-dual-versions,
230+
set-build-names,
231+
determine-branch-name,
232+
]
214233
if: always() && !failure() && !cancelled() && (needs.trigger-android-dual-versions.result == 'skipped' || needs.trigger-android-dual-versions.result == 'success') && (inputs.browserstack_app_url_android_onboarding != '' || needs.trigger-android-dual-versions.outputs.without-srp-browserstack-url != '')
215234
with:
216235
platform: android
217236
build_type: onboarding
237+
sentry_target: ${{ inputs.sentry_target || 'test' }}
218238
device_matrix: ${{ needs.read-device-matrix.outputs.android_matrix }}
219239
browserstack_app_url: ${{ needs.trigger-android-dual-versions.outputs.without-srp-browserstack-url || inputs.browserstack_app_url_android_onboarding }}
220240
app_version: ${{ needs.trigger-android-dual-versions.outputs.without-srp-version || 'Manual-Input' }}
@@ -225,11 +245,18 @@ jobs:
225245
run-ios-onboarding-tests:
226246
name: Run iOS Onboarding Tests
227247
uses: ./.github/workflows/performance-test-runner.yml
228-
needs: [read-device-matrix, trigger-ios-dual-versions, set-build-names, determine-branch-name]
248+
needs:
249+
[
250+
read-device-matrix,
251+
trigger-ios-dual-versions,
252+
set-build-names,
253+
determine-branch-name,
254+
]
229255
if: always() && !failure() && !cancelled() && (needs.trigger-ios-dual-versions.result == 'skipped' || needs.trigger-ios-dual-versions.result == 'success') && (inputs.browserstack_app_url_ios_onboarding != '' || needs.trigger-ios-dual-versions.outputs.without-srp-browserstack-url != '')
230256
with:
231257
platform: ios
232258
build_type: onboarding
259+
sentry_target: ${{ inputs.sentry_target || 'test' }}
233260
device_matrix: ${{ needs.read-device-matrix.outputs.ios_matrix }}
234261
browserstack_app_url: ${{ needs.trigger-ios-dual-versions.outputs.without-srp-browserstack-url || inputs.browserstack_app_url_ios_onboarding }}
235262
app_version: ${{ needs.trigger-ios-dual-versions.outputs.without-srp-version || 'Manual-Input' }}
@@ -267,6 +294,7 @@ jobs:
267294
with:
268295
platform: android
269296
build_type: imported-wallet
297+
sentry_target: ${{ inputs.sentry_target || 'test' }}
270298
device_matrix: ${{ needs.read-device-matrix.outputs.android_matrix }}
271299
browserstack_app_url: ${{ needs.trigger-android-dual-versions.outputs.with-srp-browserstack-url || inputs.browserstack_app_url_android_imported_wallet }}
272300
app_version: ${{ needs.trigger-android-dual-versions.outputs.with-srp-version || 'Manual-Input' }}
@@ -289,6 +317,7 @@ jobs:
289317
with:
290318
platform: ios
291319
build_type: imported-wallet
320+
sentry_target: ${{ inputs.sentry_target || 'test' }}
292321
device_matrix: ${{ needs.read-device-matrix.outputs.ios_matrix }}
293322
browserstack_app_url: ${{ needs.trigger-ios-dual-versions.outputs.with-srp-browserstack-url || inputs.browserstack_app_url_ios_imported_wallet }}
294323
app_version: ${{ needs.trigger-ios-dual-versions.outputs.with-srp-version || 'Manual-Input' }}
@@ -311,6 +340,7 @@ jobs:
311340
with:
312341
platform: android
313342
build_type: mm-connect
343+
sentry_target: ${{ inputs.sentry_target || 'test' }}
314344
device_matrix: ${{ needs.read-device-matrix.outputs.android_matrix }}
315345
browserstack_app_url: ${{ needs.trigger-android-dual-versions.outputs.with-srp-browserstack-url || inputs.browserstack_app_url_android_imported_wallet }}
316346
app_version: ${{ needs.trigger-android-dual-versions.outputs.with-srp-version || 'Manual-Input' }}
@@ -406,4 +436,4 @@ jobs:
406436
payload: |
407437
{
408438
"text": "${{ steps.summary.outputs.summary }}"
409-
}
439+
}

.js.env.example

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,12 @@ export MM_PERPS_GTM_MODAL_ENABLED="true"
188188
export MM_PERPS_ORDER_BOOK_ENABLED="true"
189189
export MM_PERPS_FEEDBACK_ENABLED="true"
190190
export MM_PERPS_MYX_PROVIDER_ENABLED="true"
191+
export MM_PERPS_MYX_APP_ID_TESTNET=""
192+
export MM_PERPS_MYX_API_SECRET_TESTNET=""
193+
export MM_PERPS_MYX_BROKER_ADDRESS_TESTNET=""
194+
export MM_PERPS_MYX_APP_ID_MAINNET=""
195+
export MM_PERPS_MYX_API_SECRET_MAINNET=""
196+
export MM_PERPS_MYX_BROKER_ADDRESS_MAINNET=""
191197
# HIP-3 Feature Flags (remote override with local fallback)
192198
export MM_PERPS_HIP3_ENABLED="true"
193199
export MM_PERPS_HIP3_ALLOWLIST_MARKETS="" # Allowlist: Empty = enable all markets. Examples: "xyz:XYZ100,xyz:TSLA" or "xyz:*,abc:TSLA"

0 commit comments

Comments
 (0)