Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
e942f50
fix: inscription test
pete-watters Feb 26, 2026
a1eff64
feat(mobile): restore developer console and restructure Maestro tests
pete-watters Feb 20, 2026
f0d2f60
fix(mobile): restore homeDeveloperToolsButton testID and fix Maestro …
pete-watters Feb 20, 2026
28485e3
ci(mobile): add code-quality gate before EAS build validation
pete-watters Feb 20, 2026
9eb3f7a
fix(mobile): revert gitignore change that caused EAS fingerprint drift
pete-watters Feb 20, 2026
3371afb
ci(mobile): scope build validation to mobile dependencies and gate on…
pete-watters Feb 23, 2026
70fae6d
fix: rebase
pete-watters Feb 23, 2026
3cb31a6
fix(mobile): correct Maestro network switch-back selector
pete-watters Feb 23, 2026
bb86f5e
fix(mobile): use text selector for create wallet button in Maestro tests
pete-watters Feb 24, 2026
4c1d7c2
fix(mobile): remove nonexistent WalletList import from developer console
pete-watters Feb 24, 2026
a414efe
fix(mobile): remove unused TestId members and use dev console for CI …
pete-watters Feb 24, 2026
4e78205
feat(mobile): gate dev console on EXPO_PUBLIC_ENABLE_DEV_CONSOLE env var
pete-watters Feb 25, 2026
331a8e2
fix(mobile): use isProduction() instead of __DEV__ for dev console vi…
pete-watters Feb 25, 2026
8bd1bf2
ci(mobile): add development environment to EAS Update step
pete-watters Feb 25, 2026
8379eb7
feat(mobile): ungated dev console and add environment debug info
pete-watters Feb 25, 2026
32f565f
ci(mobile): add env debug screenshot step to Maestro CI suite
pete-watters Feb 25, 2026
7c7339b
ci(mobile): add EXPO_PUBLIC_MAESTRO_CI to dev console env debug display
pete-watters Feb 25, 2026
fecc4fb
ci: retrigger Maestro E2E tests
pete-watters Feb 25, 2026
23401f2
ci: retrigger Maestro E2E tests
pete-watters Feb 26, 2026
b118367
fix: inscription test
pete-watters Feb 26, 2026
f071429
ci(mobile): separate smoke tests from full suite with fast-fail gate
pete-watters Feb 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 43 additions & 11 deletions .github/workflows/mobile:validate-build-pre-eas.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,57 +2,89 @@ name: mobile:validate-build-pre-eas

permissions:
contents: read
checks: read

on:
# Run on release-please dev releases
release:
types: [published]
# Run on PRs that affect mobile

# Run on PRs that affect mobile or its runtime dependencies
pull_request:
paths:
- 'apps/mobile/**'
- 'packages/**'
- 'packages/analytics/**'
- 'packages/bitcoin/**'
- 'packages/constants/**'
- 'packages/crypto/**'
- 'packages/features/**'
- 'packages/models/**'
- 'packages/provider/**'
- 'packages/queries/**'
- 'packages/query/**'
- 'packages/rpc/**'
- 'packages/services/**'
- 'packages/stacks/**'
- 'packages/state/**'
- 'packages/tokens/**'
- 'packages/ui/**'
- 'packages/utils/**'
- 'pnpm-lock.yaml'
- 'turbo.json'

# Allow manual trigger
workflow_dispatch:

jobs:
code-quality-gate:

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This makes sure we don't run the build too often by making sure the other standard checks have passed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

That's a nice improvement!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Yes it’s good to help not be wasteful with the builds

name: code-quality-gate
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'

steps:
- name: await-repo-code-checks
uses: wechuli/allcheckspassed@v1
with:
checks_include: lint-eslint,typecheck,lint-prettier,test-unit
polling_interval: 0.5
retries: 50
delay: 0.5

mobile-validate-build:
name: validate-mobile-build
needs: code-quality-gate
if: ${{ !cancelled() && (needs.code-quality-gate.result == 'success' || needs.code-quality-gate.result == 'skipped') }}
runs-on: ubuntu-latest

steps:
- name: checkout-code
uses: actions/checkout@v4

- name: setup-node
uses: actions/setup-node@v4
with:
node-version: '22.15.0'

- name: setup-pnpm
uses: pnpm/action-setup@v4

- name: get-pnpm-store-directory
id: pnpm-cache
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path)" >> "$GITHUB_OUTPUT"

- name: setup-pnpm-cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-

- name: run-mobile-build-validation
run: ./scripts/test-mobile-build.sh

- name: upload-build-logs
if: failure()
uses: actions/upload-artifact@v4
Expand Down
3 changes: 2 additions & 1 deletion apps/mobile/.eas/workflows/android-maestro-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,5 @@ jobs:
params:
build_id: ${{ needs.build_android.outputs.build_id }}
flow_path:
- maestro/flows/smoke-tests.yaml
- maestro/flows/smoke/
- maestro/flows/android/
2 changes: 1 addition & 1 deletion apps/mobile/.eas/workflows/ios-maestro-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,4 @@ jobs:
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
flow_path:
- maestro/flows/smoke-tests.yaml
- maestro/flows/smoke/
69 changes: 60 additions & 9 deletions apps/mobile/.eas/workflows/maestro-smoke-test.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Maestro Smoke Test
name: Maestro E2E Tests

on:
pull_request:
Expand All @@ -21,6 +21,7 @@ jobs:
run_eas_update:
name: EAS Update
type: update
environment: development
params:
platform: all
channel: cicd
Expand Down Expand Up @@ -61,8 +62,12 @@ jobs:
platform: ios
profile: devClient

maestro_android_cached:
name: Android Maestro (cached)
# ============================================
# Smoke tests — fast fail gate
# ============================================

smoke_android_cached:
name: Android Smoke (cached)
needs: [get_android_build, run_eas_update]
if: ${{ needs.get_android_build.outputs.build_id }}
type: maestro
Expand All @@ -72,8 +77,8 @@ jobs:
build_id: ${{ needs.get_android_build.outputs.build_id }}
flow_path: maestro/flows/smoke-tests-ci.yaml

maestro_ios_cached:
name: iOS Maestro (cached)
smoke_ios_cached:
name: iOS Smoke (cached)
needs: [get_ios_build, run_eas_update]
if: ${{ needs.get_ios_build.outputs.build_id }}
type: maestro
Expand All @@ -83,8 +88,8 @@ jobs:
build_id: ${{ needs.get_ios_build.outputs.build_id }}
flow_path: maestro/flows/smoke-tests-ci.yaml

maestro_android_fresh:
name: Android Maestro (fresh)
smoke_android_fresh:
name: Android Smoke (fresh)
needs: [build_android, run_eas_update]
type: maestro
env:
Expand All @@ -93,12 +98,58 @@ jobs:
build_id: ${{ needs.build_android.outputs.build_id }}
flow_path: maestro/flows/smoke-tests-ci.yaml

maestro_ios_fresh:
name: iOS Maestro (fresh)
smoke_ios_fresh:
name: iOS Smoke (fresh)
needs: [build_ios, run_eas_update]
type: maestro
env:
MAESTRO_DEEP_LINK_URL: 'exp+leather://expo-development-client/?url=https://u.expo.dev/c03c1f22-be7b-4b76-aa1b-3ebf716bd2cc?channel-name=cicd'
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
flow_path: maestro/flows/smoke-tests-ci.yaml

# ============================================
# Full suite — runs only after smoke passes
# ============================================

maestro_android_cached:
name: Android Full Suite (cached)
needs: [smoke_android_cached, get_android_build]
if: ${{ needs.get_android_build.outputs.build_id }}
type: maestro
env:
MAESTRO_DEEP_LINK_URL: 'exp+leather://expo-development-client/?url=https://u.expo.dev/c03c1f22-be7b-4b76-aa1b-3ebf716bd2cc?channel-name=cicd'
params:
build_id: ${{ needs.get_android_build.outputs.build_id }}
flow_path: maestro/flows/full-suite-ci.yaml

maestro_ios_cached:
name: iOS Full Suite (cached)
needs: [smoke_ios_cached, get_ios_build]
if: ${{ needs.get_ios_build.outputs.build_id }}
type: maestro
env:
MAESTRO_DEEP_LINK_URL: 'exp+leather://expo-development-client/?url=https://u.expo.dev/c03c1f22-be7b-4b76-aa1b-3ebf716bd2cc?channel-name=cicd'
params:
build_id: ${{ needs.get_ios_build.outputs.build_id }}
flow_path: maestro/flows/full-suite-ci.yaml

maestro_android_fresh:
name: Android Full Suite (fresh)
needs: [smoke_android_fresh, build_android]
type: maestro
env:
MAESTRO_DEEP_LINK_URL: 'exp+leather://expo-development-client/?url=https://u.expo.dev/c03c1f22-be7b-4b76-aa1b-3ebf716bd2cc?channel-name=cicd'
params:
build_id: ${{ needs.build_android.outputs.build_id }}
flow_path: maestro/flows/full-suite-ci.yaml

maestro_ios_fresh:
name: iOS Full Suite (fresh)
needs: [smoke_ios_fresh, build_ios]
type: maestro
env:
MAESTRO_DEEP_LINK_URL: 'exp+leather://expo-development-client/?url=https://u.expo.dev/c03c1f22-be7b-4b76-aa1b-3ebf716bd2cc?channel-name=cicd'
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
flow_path: maestro/flows/full-suite-ci.yaml
16 changes: 16 additions & 0 deletions apps/mobile/maestro/flows/android/010-create-wallet-sheet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
appId: io.leather.mobilewallet

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This adds a specific test to make sure we can restore wallets from the bottom sheet. It's for Android only as iOS tests cannot use buttons in the sheet

name: "Android: Create Wallet via Sheet"
---
- launchApp
- runFlow: ../../shared/clean-up.yaml
- tapOn:
id: 'homeCreateWalletCard'
- tapOn: 'Create new wallet'
- tapOn:
id: 'walletCreationTapToReveal'
- tapOn:
id: 'walletCreationBackedUpButton'
- tapOn: 'Skip for now'
- tapOn: 'Proceed'
- assertVisible:
id: 'homeAccountCard-0'
18 changes: 18 additions & 0 deletions apps/mobile/maestro/flows/android/020-restore-wallet-sheet.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
appId: io.leather.mobilewallet
name: "Android: Restore Wallet via Sheet"
---
- launchApp
- runFlow: ../../shared/clean-up.yaml
- tapOn:
id: 'homeCreateWalletCard'
- tapOn:
id: 'restoreWalletSheetButton'
- tapOn:
id: 'restoreWalletTextInput'
- inputText: 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon cactus'
- tapOn:
id: 'restoreWalletContinue'
- tapOn: 'Skip for now'
- tapOn: 'Proceed'
- assertVisible:
id: 'homeAccountCard-0'
Loading