Skip to content

Commit c298c3d

Browse files
authored
Merge branch 'main' into fix/ledger-error-handling-28272
2 parents 1d255af + 8208502 commit c298c3d

654 files changed

Lines changed: 34631 additions & 30469 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.

.eslintrc.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,33 @@ module.exports = {
385385
],
386386
},
387387
},
388+
{
389+
files: ['**/*.test.{js,ts,tsx,jsx}', '**/*.spec.{js,ts,tsx,jsx}'],
390+
plugins: ['jest'],
391+
rules: {
392+
// Prevent new file-based snapshots. Inline snapshots (toMatchInlineSnapshot)
393+
// are still allowed as they keep assertions co-located with the test.
394+
'jest/no-restricted-matchers': [
395+
'error',
396+
{
397+
toMatchSnapshot:
398+
'Use toMatchInlineSnapshot() or an explicit assertion instead. File-based snapshots are being phased out.',
399+
},
400+
],
401+
},
402+
},
403+
{
404+
// Matches CODEOWNERS `**/snaps/**` and `**/Snaps/**` (@MetaMask/core-platform).
405+
// ESLint cannot read CODEOWNERS.
406+
files: [
407+
'**/snaps/**/*.{test,spec}.{js,ts,tsx,jsx}',
408+
'**/Snaps/**/*.{test,spec}.{js,ts,tsx,jsx}',
409+
],
410+
plugins: ['jest'],
411+
rules: {
412+
'jest/no-restricted-matchers': 'off',
413+
},
414+
},
388415
// ── Perps controller Core-alignment override ──
389416
// Enforces the same ESLint rules that Core's @metamask/eslint-config
390417
// applies to packages/perps-controller so that code written in mobile

.github/guidelines/E2E_DECISION_TREE.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ To save infra resources while waiting for static analysis findings and potential
3333
- E2E tests are skipped and merge is blocked while the label is present, **unless** all changes are ignorable-only.
3434
- If E2E tests are needed, they should pass to be able to merge.
3535

36-
## AI test selection
36+
## Smart AI E2E test selection
3737

3838
Runs only when all of the following are true:
3939

@@ -53,3 +53,10 @@ Flakiness detection is applied to modified E2E test files in PRs:
5353
- Modified E2E test files run twice
5454
- It applies to existing test files as well as new test files added in the PR
5555
- It can be disabled by adding the label `skip-e2e-flakiness-detection`. Useful when making large refactors or when changes don't pose flakiness risk.
56+
57+
## Release branches
58+
59+
PRs to release branches (cherry-picked from main) are exempt from the following:
60+
61+
- Label `pr-not-ready-for-e2e` is not applied
62+
- Smart AI E2E selection is skipped - all E2E suites are run (if changes are not ignorable-only, e.g. only docs)
Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
##############################################################################################
2+
#
3+
# Auto RC OTA / build core (reusable)
4+
#
5+
# Shared logic for the Auto RC flow (build-rc-auto.yml): detect an OTA_VERSION bump and either
6+
# dispatch push-eas-update.yml, or fall through to build.yml.
7+
#
8+
# Runway's manual entry workflows no longer use this file — they call the dedicated OTA-only or
9+
# build-only workflows (runway-ota-*.yml, runway-*-builds.yml) directly. Kept here to preserve
10+
# automatic OTA-vs-build detection on every push to a release branch.
11+
#
12+
##############################################################################################
13+
name: Auto RC OTA Build Core
14+
15+
on:
16+
workflow_call:
17+
inputs:
18+
platform:
19+
description: 'Target platform passed to push-eas-update and build.yml (android or ios)'
20+
required: true
21+
type: string
22+
source_branch:
23+
description: >-
24+
Optional branch, tag, or SHA (Build workflow source_branch).
25+
Empty uses the branch selected in the caller workflow_dispatch "Use workflow from" UI.
26+
required: false
27+
type: string
28+
default: ''
29+
ota_channel:
30+
description: 'push-eas-update channel input (e.g. rc, production)'
31+
required: false
32+
type: string
33+
default: rc
34+
build_name:
35+
description: 'build.yml build_name (e.g. main-rc, main-prod)'
36+
required: false
37+
type: string
38+
default: main-rc
39+
create_production_ota_tag:
40+
description: 'If true, create OTA release tag after production trigger-ota (callers: *production* only)'
41+
required: false
42+
type: boolean
43+
default: false
44+
environment:
45+
description: 'Build environment / track passed to upload-to-testflight (e.g. rc, prod)'
46+
required: false
47+
type: string
48+
default: 'rc'
49+
skip_version_bump:
50+
description: >-
51+
If true, build.yml skips update-latest-build-version. Auto-RC callers set true since the
52+
bump is performed once upstream.
53+
required: false
54+
type: boolean
55+
default: false
56+
outputs:
57+
semantic_version:
58+
description: 'package.json version at the built commit (empty when OTA path taken)'
59+
value: ${{ jobs.trigger-build.outputs.semantic_version }}
60+
ios_version_code:
61+
description: 'iOS CURRENT_PROJECT_VERSION at the built commit (empty when OTA path taken)'
62+
value: ${{ jobs.trigger-build.outputs.ios_version_code }}
63+
android_version_code:
64+
description: 'Android versionCode at the built commit (empty when OTA path taken)'
65+
value: ${{ jobs.trigger-build.outputs.android_version_code }}
66+
67+
permissions:
68+
contents: write # required by build.yml (update-build-version job)
69+
pull-requests: read
70+
actions: write
71+
id-token: write # required by build.yml
72+
73+
jobs:
74+
resolve-context:
75+
name: Resolve OTA context
76+
uses: ./.github/workflows/runway-ota-resolve-context.yml
77+
with:
78+
source_branch: ${{ inputs.source_branch }}
79+
secrets: inherit
80+
81+
validate-ota-pr:
82+
name: Validate PR for OTA
83+
needs: resolve-context
84+
if: needs.resolve-context.outputs.ota_bump == 'true'
85+
runs-on: ubuntu-latest
86+
steps:
87+
- name: Validate PR number
88+
run: |
89+
if [[ -z "${{ needs.resolve-context.outputs.pr_number }}" ]]; then
90+
echo "::error::No PR found for this branch. OTA update requires a PR number."
91+
echo "::error::If you ran the workflow manually (workflow_dispatch), select your release branch in the 'Use workflow from' dropdown (e.g. release/7.71.0), not main."
92+
exit 1
93+
fi
94+
echo "Using PR #${{ needs.resolve-context.outputs.pr_number }}"
95+
96+
trigger-ota:
97+
name: Trigger OTA update
98+
needs: [resolve-context, validate-ota-pr]
99+
if: needs.resolve-context.outputs.ota_bump == 'true'
100+
uses: ./.github/workflows/push-eas-update.yml
101+
with:
102+
pr_number: ${{ needs.resolve-context.outputs.pr_number }}
103+
base_branch: ${{ needs.resolve-context.outputs.base_ref }}
104+
message: ${{ needs.resolve-context.outputs.ota_version }}
105+
channel: ${{ inputs.ota_channel }}
106+
platform: ${{ inputs.platform }}
107+
secrets: inherit
108+
109+
trigger-build:
110+
name: Trigger build mobile app
111+
needs: resolve-context
112+
if: needs.resolve-context.outputs.ota_bump != 'true'
113+
uses: ./.github/workflows/build.yml
114+
with:
115+
build_name: ${{ inputs.build_name }}
116+
platform: ${{ inputs.platform }}
117+
skip_version_bump: ${{ inputs.skip_version_bump }}
118+
source_branch: ${{ inputs.source_branch || github.ref_name }}
119+
upload_to_sentry: true
120+
secrets: inherit
121+
122+
create-ota-production-tag:
123+
name: Create OTA production release tag
124+
needs: [resolve-context, trigger-ota]
125+
if: ${{ inputs.create_production_ota_tag == true }}
126+
uses: ./.github/workflows/runway-create-ota-production-tag.yml
127+
with:
128+
tag_name: ${{ needs.resolve-context.outputs.ota_version }}
129+
checkout_ref: ${{ inputs.source_branch || github.ref_name }}
130+
secrets: inherit
131+
132+
upload-ios-testflight:
133+
name: Upload iOS to TestFlight
134+
needs: [trigger-build]
135+
if: ${{ inputs.platform == 'ios' }}
136+
uses: ./.github/workflows/upload-to-testflight.yml
137+
with:
138+
environment: ${{ inputs.environment }}
139+
source_branch: ${{ inputs.source_branch || github.ref_name }}
140+
build_branch: ${{ inputs.source_branch || github.ref_name }}
141+
build_name: ${{ inputs.build_name }}
142+
build_commit_sha: ${{ needs.trigger-build.outputs.built_commit_sha }}
143+
build_version: ${{ needs.trigger-build.outputs.semantic_version }}
144+
build_number: ${{ needs.trigger-build.outputs.ios_version_code }}
145+
secrets: inherit

.github/workflows/build-android-e2e.yml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -207,16 +207,6 @@ jobs:
207207
SEGMENT_REGULATIONS_ENDPOINT_FLASK: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_FLASK }}
208208
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
209209
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}
210-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
211-
FLASK_IOS_GOOGLE_CLIENT_ID_PROD: ${{ secrets.FLASK_IOS_GOOGLE_CLIENT_ID_PROD }}
212-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
213-
FLASK_IOS_GOOGLE_REDIRECT_URI_PROD: ${{ secrets.FLASK_IOS_GOOGLE_REDIRECT_URI_PROD }}
214-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
215-
FLASK_ANDROID_APPLE_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_APPLE_CLIENT_ID_PROD }}
216-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
217-
FLASK_ANDROID_GOOGLE_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_GOOGLE_CLIENT_ID_PROD }}
218-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
219-
FLASK_ANDROID_GOOGLE_SERVER_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_GOOGLE_SERVER_CLIENT_ID_PROD }}
220210
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
221211
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
222212
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}
@@ -258,16 +248,6 @@ jobs:
258248
SEGMENT_REGULATIONS_ENDPOINT_FLASK: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_FLASK }}
259249
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
260250
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}
261-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
262-
FLASK_IOS_GOOGLE_CLIENT_ID_PROD: ${{ secrets.FLASK_IOS_GOOGLE_CLIENT_ID_PROD }}
263-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
264-
FLASK_IOS_GOOGLE_REDIRECT_URI_PROD: ${{ secrets.FLASK_IOS_GOOGLE_REDIRECT_URI_PROD }}
265-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
266-
FLASK_ANDROID_APPLE_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_APPLE_CLIENT_ID_PROD }}
267-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
268-
FLASK_ANDROID_GOOGLE_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_GOOGLE_CLIENT_ID_PROD }}
269-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
270-
FLASK_ANDROID_GOOGLE_SERVER_CLIENT_ID_PROD: ${{ secrets.FLASK_ANDROID_GOOGLE_SERVER_CLIENT_ID_PROD }}
271251
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
272252
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
273253
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}

.github/workflows/build-ios-e2e.yml

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,6 @@ jobs:
6060
SEGMENT_REGULATIONS_ENDPOINT_QA: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_QA }}
6161
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
6262
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}
63-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
64-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
65-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
66-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
67-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
6863
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
6964
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
7065
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}
@@ -194,11 +189,6 @@ jobs:
194189
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
195190
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}
196191

197-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
198-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
199-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
200-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
201-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
202192
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
203193
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
204194

@@ -232,11 +222,6 @@ jobs:
232222
SEGMENT_REGULATIONS_ENDPOINT_QA: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_QA }}
233223
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
234224
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}
235-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
236-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
237-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
238-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
239-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
240225
GOOGLE_SERVICES_B64_IOS: ${{ secrets.GOOGLE_SERVICES_B64_IOS }}
241226
GOOGLE_SERVICES_B64_ANDROID: ${{ secrets.GOOGLE_SERVICES_B64_ANDROID }}
242227
MM_INFURA_PROJECT_ID: ${{ secrets.MM_INFURA_PROJECT_ID }}

.github/workflows/build-rc-auto.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# Bitrise "Rolling builds" / "Abort running builds" for one branch + one workflow).
99
#
1010
# Version bump runs once (update-latest-build-version.yml), then iOS and Android
11-
# builds are triggered in parallel via runway-ota-build-core.yml (skip_version_bump).
11+
# builds are triggered in parallel via auto-rc-ota-build-core.yml (skip_version_bump).
1212
#
1313
# The RC build comment includes an AI-generated test plan (inline with collapsible sections).
1414
#
@@ -104,7 +104,7 @@ jobs:
104104

105105
trigger-ios-rc-build:
106106
name: Trigger iOS RC Build
107-
uses: ./.github/workflows/runway-ota-build-core.yml
107+
uses: ./.github/workflows/auto-rc-ota-build-core.yml
108108
needs:
109109
- validate-and-find-pr
110110
- update_rc_build_version
@@ -117,7 +117,7 @@ jobs:
117117

118118
trigger-android-rc-build:
119119
name: Trigger Android RC Build
120-
uses: ./.github/workflows/runway-ota-build-core.yml
120+
uses: ./.github/workflows/auto-rc-ota-build-core.yml
121121
needs:
122122
- validate-and-find-pr
123123
- update_rc_build_version

.github/workflows/build.yml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ on:
6868
- flask-test
6969
- flask-e2e
7070
- flask-dev
71-
- qa-prod
72-
- qa-dev
7371
platform:
7472
required: true
7573
type: choice
@@ -125,6 +123,7 @@ jobs:
125123
uses: actions/setup-node@v4
126124
with:
127125
node-version-file: '.nvmrc'
126+
cache: 'yarn'
128127
- run: yarn install --immutable
129128
- run: node scripts/validate-build-config.js
130129

.github/workflows/run-e2e-api-specs.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ jobs:
2323
SEGMENT_WRITE_KEY_QA: ${{ secrets.SEGMENT_WRITE_KEY_QA }}
2424
SEGMENT_PROXY_URL_QA: ${{ secrets.SEGMENT_PROXY_URL_QA }}
2525
SEGMENT_DELETE_API_SOURCE_ID_QA: ${{ secrets.SEGMENT_DELETE_API_SOURCE_ID_QA }}
26-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
27-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
2826
SEGMENT_REGULATIONS_ENDPOINT_QA: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_QA }}
2927
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
3028
MM_SOLANA_E2E_TEST_SRP: ${{ secrets.MM_SOLANA_E2E_TEST_SRP }}

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@ jobs:
8484
SEGMENT_WRITE_KEY_QA: ${{ secrets.SEGMENT_WRITE_KEY_QA }}
8585
SEGMENT_PROXY_URL_QA: ${{ secrets.SEGMENT_PROXY_URL_QA }}
8686
SEGMENT_DELETE_API_SOURCE_ID_QA: ${{ secrets.SEGMENT_DELETE_API_SOURCE_ID_QA }}
87-
MAIN_IOS_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_IOS_GOOGLE_CLIENT_ID_UAT }}
88-
MAIN_IOS_GOOGLE_REDIRECT_URI_UAT: ${{ secrets.MAIN_IOS_GOOGLE_REDIRECT_URI_UAT }}
89-
MAIN_ANDROID_APPLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_APPLE_CLIENT_ID_UAT }}
90-
MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_CLIENT_ID_UAT }}
91-
MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT: ${{ secrets.MAIN_ANDROID_GOOGLE_SERVER_CLIENT_ID_UAT }}
9287
SEGMENT_REGULATIONS_ENDPOINT_QA: ${{ secrets.SEGMENT_REGULATIONS_ENDPOINT_QA }}
9388
MM_SENTRY_DSN_TEST: ${{ secrets.MM_SENTRY_DSN_TEST }}
9489
MM_SENTRY_AUTH_TOKEN: ${{ secrets.MM_SENTRY_AUTH_TOKEN }}

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

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ jobs:
142142
needs: [determine-branch-name]
143143
outputs:
144144
android_matrix: ${{ steps.read-matrix.outputs.android_matrix }}
145+
android_mm_connect_matrix: ${{ steps.read-matrix.outputs.android_mm_connect_matrix }}
145146
ios_matrix: ${{ steps.read-matrix.outputs.ios_matrix }}
146147
steps:
147148
- name: Checkout code
@@ -165,18 +166,23 @@ jobs:
165166
fi
166167
167168
ANDROID_MATRIX=$(jq ".android_devices | $FILTER" "$FILE")
169+
ANDROID_MM_CONNECT_MATRIX=$(jq '[.android_devices[] | select(.name | contains("Samsung"))]' "$FILE")
168170
IOS_MATRIX=$(jq ".ios_devices | $FILTER" "$FILE")
169171
170172
{
171173
echo "android_matrix<<EOF"
172174
echo "$ANDROID_MATRIX"
173175
echo "EOF"
176+
echo "android_mm_connect_matrix<<EOF"
177+
echo "$ANDROID_MM_CONNECT_MATRIX"
178+
echo "EOF"
174179
echo "ios_matrix<<EOF"
175180
echo "$IOS_MATRIX"
176181
echo "EOF"
177182
} >> "$GITHUB_OUTPUT"
178183
179184
echo "Selected: $(echo "$ANDROID_MATRIX" | jq length) Android, $(echo "$IOS_MATRIX" | jq length) iOS"
185+
echo "Selected for Android MM-Connect: $(echo "$ANDROID_MM_CONNECT_MATRIX" | jq length)"
180186
181187
set-build-names:
182188
name: Set Unified BrowserStack Build Names
@@ -333,7 +339,7 @@ jobs:
333339
name: Fetch RN Playground APK and Upload to BrowserStack
334340
runs-on: ubuntu-latest
335341
needs: [wait-for-onboarding-completion]
336-
if: always() && !cancelled()
342+
if: always() && !cancelled() && (inputs.build_variant || 'rc') == 'rc'
337343
outputs:
338344
browserstack-playground-url: ${{ steps.upload-playground.outputs.browserstack-url }}
339345
steps:
@@ -376,13 +382,13 @@ jobs:
376382
set-build-names,
377383
determine-branch-name,
378384
]
379-
if: always() && !cancelled() && (needs.trigger-android-dual-versions.result == 'skipped' || needs.trigger-android-dual-versions.result == 'success') && (inputs.browserstack_app_url_android_imported_wallet != '' || needs.trigger-android-dual-versions.outputs.with-srp-browserstack-url != '')
385+
if: always() && !cancelled() && (inputs.build_variant || 'rc') == 'rc' && (needs.trigger-android-dual-versions.result == 'skipped' || needs.trigger-android-dual-versions.result == 'success') && (inputs.browserstack_app_url_android_imported_wallet != '' || needs.trigger-android-dual-versions.outputs.with-srp-browserstack-url != '')
380386
with:
381387
platform: android
382388
build_type: mm-connect
383389
sentry_target: ${{ inputs.sentry_target || 'test' }}
384390
build_variant: ${{ inputs.build_variant || 'rc' }}
385-
device_matrix: ${{ needs.read-device-matrix.outputs.android_matrix }}
391+
device_matrix: ${{ needs.read-device-matrix.outputs.android_mm_connect_matrix }}
386392
browserstack_app_url: ${{ needs.trigger-android-dual-versions.outputs.with-srp-browserstack-url || inputs.browserstack_app_url_android_imported_wallet }}
387393
app_version: ${{ needs.trigger-android-dual-versions.outputs.with-srp-version || 'Manual-Input' }}
388394
branch_name: ${{ needs.determine-branch-name.outputs.branch_name }}

0 commit comments

Comments
 (0)