Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
164 commits
Select commit Hold shift + click to select a range
7620e03
Splash: Fix - startup navigation flicker on Android devices
cmgustavo Apr 6, 2026
882fc1d
XCode: Fix - Patch fmt consteval for Xcode 26/Clang compatibility
cmgustavo Apr 17, 2026
da44a44
Location: Fix - return normalized location data and ensure dispatch c…
cmgustavo Apr 20, 2026
b114c34
bump 14.43.0
JohnathanWhite Apr 20, 2026
9c6347a
Merge pull request #2147 from JohnathanWhite/bump-14.43.0
JohnathanWhite Apr 20, 2026
c91470a
Merge pull request #2112 from cmgustavo/bug/prevent-multiple-analytic…
JohnathanWhite Apr 22, 2026
805c63b
Merge pull request #2077 from cmgustavo/bug/android-onboarding-double…
JohnathanWhite Apr 22, 2026
1d8bc28
Fix: pre-select wallet from assets details correctly
Gamboster Apr 22, 2026
e34b98a
Swap: Fix - pre-select highest balance wallet from current account
gabrielbazan7 Apr 22, 2026
ac3c08b
Merge pull request #2149 from gabrielbazan7/fix/account-swap-default
JohnathanWhite Apr 22, 2026
94fa001
Merge pull request #2146 from cmgustavo/bug/get-location-for-external…
JohnathanWhite Apr 22, 2026
53a4ca9
Merge pull request #2148 from Gamboster/fix/selectedWalletFromAssetsD…
JohnathanWhite Apr 22, 2026
c1dbb23
pipeline updates
JohnathanWhite Apr 23, 2026
2b669c2
Merge pull request #2132 from JohnathanWhite/fix/jest-unit-tests
JohnathanWhite Apr 24, 2026
34c1cae
Merge pull request #2145 from cmgustavo/bug/build-ios-xcode-02
JohnathanWhite Apr 24, 2026
3db7518
Braze: Fix - Prevent remove oldEid before merge data to newEid
cmgustavo Apr 23, 2026
cd6272d
Braze: Fix - Ensure new users start with email notifications subscribed
cmgustavo Apr 23, 2026
5c9e427
TSS: Enhancement - simplify TSS session ID format to txpId:input
gabrielbazan7 Apr 28, 2026
a9001f5
Merge pull request #2152 from cmgustavo/bug/braze-email-subscription-01
JohnathanWhite Apr 30, 2026
ac19dfe
Merge pull request #2153 from gabrielbazan7/ref/tss-session-id
JohnathanWhite Apr 30, 2026
b414e51
feat: add balance charts
msalcala11 Mar 17, 2026
2073aa6
fix: hide balance charts for testnet wallets and use smaller font siz…
msalcala11 Mar 18, 2026
1390a2b
fix: prevent duplicate wallets in asset list
msalcala11 Mar 22, 2026
169b062
ref: make 1D timeframe the default
msalcala11 Mar 22, 2026
d54ffb5
fix: fix misc ts errors
msalcala11 Mar 23, 2026
15e9dd1
feat: display asset balance history charts
msalcala11 Mar 25, 2026
4baf140
fix: omit coin query param from rates fetches and fix pol tokens and …
msalcala11 Mar 25, 2026
feaffc5
fix: hide gain timeframe selector when app goes to background
msalcala11 Mar 26, 2026
6f7b09c
ref: split balance history and price chart screens
msalcala11 Mar 26, 2026
69bd06c
fix: use more granular rates for the 'All' timeframe
msalcala11 Mar 26, 2026
679d995
fix: do not show balance chart in wallet details if balance is 0
msalcala11 Mar 26, 2026
05ea770
ref: stop truncating trailing 0s
msalcala11 Mar 26, 2026
4379636
ref: include hours and minutes in 'All' timeframe timestamps if short…
msalcala11 Mar 26, 2026
e47759d
fix: normalize PnL of first point in 'All' series
msalcala11 Mar 26, 2026
a35708d
fix: preserve extrema when downsampling rate data
msalcala11 Mar 26, 2026
8822032
ref: run portfolio math in worklet
msalcala11 May 6, 2026
657d20c
fix: better handle malformed balances
msalcala11 May 6, 2026
a0f3340
fix: use live wallet fiat balances in asset list item aggregate balance
msalcala11 May 6, 2026
c22e129
Merge pull request #2158 from msalcala11/portfolio-charts-v1
JohnathanWhite May 6, 2026
b9f57f2
TSS: Fix - Prevent keygen endpoint spam from leaked polling intervals
cmgustavo May 8, 2026
4fbca83
Merge pull request #2162 from cmgustavo/bug/tss-keygen-request-01
JohnathanWhite May 9, 2026
1b900d2
TSS: Fix - Cancel ceremony when unmounting mid-join (new-join path)
cmgustavo May 11, 2026
9072973
Merge pull request #2164 from cmgustavo/bug/cancel-tss-unmounting-joi…
JohnathanWhite May 11, 2026
fc7c576
fix: use correct bwc version for tx history requests
msalcala11 May 12, 2026
3487a7e
fix: hide balance charts and asset lists if no non-zero balance wallets
msalcala11 May 12, 2026
824ebea
Merge pull request #2166 from msalcala11/portfolio-fixes
JohnathanWhite May 12, 2026
8f6f023
Feat: update packages needed for embedded buy
Gamboster May 16, 2026
5983c6e
Feat: allowedUrl for embedded buy requests added
Gamboster May 16, 2026
d65e8cf
Feat: new models for moonpay embedded flow added
Gamboster May 16, 2026
afa211f
Feat: moonpay webView implemented
Gamboster May 16, 2026
f36028a
Feat: moonpay frameCrypto implemented
Gamboster May 16, 2026
8b20f25
Feat: moonpay checkConnection implemented
Gamboster May 16, 2026
0a8adaa
Feat: moonpay resetFrame implemented
Gamboster May 16, 2026
a3182ee
ref: archax updates
msalcala11 May 13, 2026
42ac5b8
fix: use live cached BWS balances for top idle balance in KeyOverview…
msalcala11 May 13, 2026
c77f006
Feat: moonpay embedded flow credentialManager
Gamboster May 16, 2026
e5edb35
Feat: new icons and button styles for moonpay connect
Gamboster May 16, 2026
eca6a1e
Feat: new inapp moonpay requests for embedded flow
Gamboster May 16, 2026
c75efa0
Feat: moonpay embedded onboarding implemented
Gamboster May 16, 2026
183ce88
Feat: moonpay applePayFrame and embedded checkout
Gamboster May 16, 2026
2397890
Feat: moonpay embedded buy
Gamboster May 16, 2026
a61eeec
Feat: moonpay txDetails and settings updated to support embedded
Gamboster May 16, 2026
32bb2cd
Feat: moonpay embedded added to connections list
Gamboster May 16, 2026
97627fe
Fix: moonpayEmbeddedCredentialManager prettier
Gamboster May 16, 2026
c92e828
Ref: update default pills values in buy and sell
Gamboster May 16, 2026
0ee08b3
Feat: possibility of disabling embedded flow from BWS
Gamboster May 18, 2026
d72eb28
Fix: credentialManager to call createSession with Auth credentials
Gamboster May 18, 2026
d9d56f5
Fix: remove forced true from isNYorWA flag
Gamboster May 18, 2026
3ab6ac7
Fix: skeleton name and styles in embedded checkout
Gamboster May 19, 2026
82389e8
Fix: embedded-buy loggers and analytics
Gamboster May 19, 2026
aa6f7a2
ref: harden decimal resolution, exclude excessive balance wallets fro…
msalcala11 May 17, 2026
52361e9
fix: populate portfolio on key import
msalcala11 May 17, 2026
cbc5e4d
fix: ensure a multisig wallet can be populated when multiple of its k…
msalcala11 May 17, 2026
c63c691
fix: show balance charts after a first-ever import populate finishes
msalcala11 May 17, 2026
33d1527
fix: filter excessive_balance_mismatch wallets from asset details cha…
msalcala11 May 18, 2026
5e3c145
ref: display balance charts mid populate as soon as they are ready
msalcala11 May 18, 2026
3254542
fix: keep showing chart loader until balance chart is renderable
msalcala11 May 18, 2026
a6f7905
ref: only hold wallet details balance chart in loading state for rele…
msalcala11 May 18, 2026
e2daa23
ref: don't wait for snapshot populate to finish on home root pull to …
msalcala11 May 18, 2026
dad24b4
fix: ensure balance chart spans across the full width of the screen o…
msalcala11 May 18, 2026
0f6dbce
fix: add right padding to min axis label when it is against the right…
msalcala11 May 18, 2026
a1bd5e0
fix: keep rates storage use count only in rates item instead of also …
msalcala11 May 18, 2026
2bcd60d
fix: display legacy pnl and labels in key overview, account details, …
msalcala11 May 18, 2026
3f9f070
ref: show fiat value in asset list items at all times
msalcala11 May 18, 2026
93b854b
fix: clear UI PnL summary cache when disabling portfolio
msalcala11 May 18, 2026
6bbc401
fix: make skeleton loader component dimensions match the components t…
msalcala11 May 18, 2026
0906c95
fix: reduce gap between the Do More and Exchange Rates home sections
msalcala11 May 19, 2026
e9a7f48
fix: show balance charts for zero-balance wallets with snapshots
msalcala11 May 19, 2026
31d3c2e
feat: include zero balance wallets with history in asset details wall…
msalcala11 May 19, 2026
9a4bc77
fix: make asset details and exchange rate wallet lists identical
msalcala11 May 19, 2026
313f160
fix: ensure both include zero balance wallets with snapshots
msalcala11 May 19, 2026
0b67628
fix: render 0 balance intervals as a flat line
msalcala11 May 19, 2026
0b71130
fix: fade out max axis label for full 0s charts
msalcala11 May 19, 2026
f16a20c
fix: render 0 balance line in middle of chart
msalcala11 May 19, 2026
ec37fbb
fix: fade out min axis label just like max axis label for zero balanc…
msalcala11 May 19, 2026
3c42c50
fix: render wallet details balance section identically for wallets of…
msalcala11 May 19, 2026
75d96cb
ref: color 0 PnL text neutral
msalcala11 May 19, 2026
52e8748
ref: remove unneeded prop
msalcala11 May 19, 2026
e060f8f
fix: format 0 PnL as 0.00
msalcala11 May 19, 2026
c5f8243
ref: simpler
msalcala11 May 19, 2026
80921b3
fix: consistent decimals for crypto balance in wallet item
msalcala11 May 19, 2026
f46ca87
fix: hide balance charts on initial populate
msalcala11 May 19, 2026
cb91e11
fix: use consistent precision in wallet details and account details b…
msalcala11 May 19, 2026
6949ea6
fix: display testnet wallet labels
msalcala11 May 19, 2026
51f583a
ref: display balance charts for wallets without history
msalcala11 May 19, 2026
d45df54
ref: fade out dotted line if timeframe is a flat 0 line
msalcala11 May 19, 2026
9c90d23
ref: simplify
msalcala11 May 19, 2026
dc6e70a
fix: hide balance chart for wallets with non-zero bws balance but no …
msalcala11 May 19, 2026
0d4686b
fix: gate balance charts while populate data is not ready
msalcala11 May 19, 2026
2332073
fix: redact wallet IDs from sentry portfolio logs
msalcala11 May 19, 2026
c2aece5
fix: make pull to refresh triggered populates retry quarantined wallets
msalcala11 May 19, 2026
dbf8e0d
fix: keep asset rows stable during PnL summary refresh
msalcala11 May 19, 2026
2df97a0
fix: show collapse/expand home root balance chart button if balance c…
msalcala11 May 19, 2026
cae951f
fix: skip zero balance wallets with no tx history during incremental …
msalcala11 May 19, 2026
f75df80
fix: make excessive_balance_mismatch checks direction agnostic
msalcala11 May 19, 2026
2b10922
fix: don't await populate when pulling to refresh on any screen
msalcala11 May 20, 2026
5917ffd
ref: simplify portfolio chart populate changes
msalcala11 May 20, 2026
9321dd6
chore: make it possible to search by wallet ID in Portfolio Debug
msalcala11 May 20, 2026
f45868b
fix: quarantine zero balance sol token wallets that return errors for…
msalcala11 May 20, 2026
3ab29d1
fix: show skeleton loaders instead of placeholders for populating ass…
msalcala11 May 20, 2026
841e341
Feat: moonpayChallengeFrame added to handle possible payment challenges
Gamboster May 21, 2026
7e2fcaa
bump BWC to v11.9.0
Gamboster May 21, 2026
666e231
Fix: moonpayEmbeddedCredentialManager prettier
Gamboster May 21, 2026
f4b68fd
Merge pull request #2167 from msalcala11/portfolio-uk
JohnathanWhite May 21, 2026
e195da2
Merge branch 'develop' into feat/moonpayEmbeddedBuy
JohnathanWhite May 21, 2026
19cc053
Merge pull request #2169 from Gamboster/feat/moonpayEmbeddedBuy
JohnathanWhite May 21, 2026
4470699
handle hex number on txp
kajoseph May 24, 2026
d3e8861
Merge branch 'develop' of github.com:bitpay/bitpay-app into handleHex…
kajoseph May 24, 2026
aafd21c
prettier lint
kajoseph May 24, 2026
4be1494
fix: don't clear snapshots on network request errors
msalcala11 May 24, 2026
e5f76fd
fix: don't fall back to full populate when startup wallet init takes …
msalcala11 May 26, 2026
1182fa0
chore: add portfolio PnL debug log details
msalcala11 May 26, 2026
038c22a
ref: DRY up nitro fetch error handling and simplify Portfolio Debug
msalcala11 May 27, 2026
3445b78
fix: preserve stale balance chart while incremental populate is running
msalcala11 May 27, 2026
c447421
fix: increase populate txhistory timeout to 100s
msalcala11 May 28, 2026
ae8b3d0
Fix: daily limit error msg translation added
Gamboster May 29, 2026
05b7a54
Fix: Prevent the createSession request from being called multiple tim…
Gamboster May 29, 2026
63ddce1
Fix: same url base is used for all env in embedded requests
Gamboster May 29, 2026
322fb77
Update translation file
Gamboster May 29, 2026
b717257
Fix: moonpay-sell redirectUrl correctly handled
Gamboster May 29, 2026
f2500a5
Fix: transactMenu disabled buttons conditions
Gamboster May 29, 2026
7a72c69
fix: keep charts interactive during incremental populate
msalcala11 May 31, 2026
8663ddd
Merge pull request #2171 from kajoseph/handleHexTxpAmounts
JohnathanWhite Jun 1, 2026
b732d2b
Merge pull request #2177 from Gamboster/fix/embeddedBuyCredentialMana…
JohnathanWhite Jun 1, 2026
dc0c1f0
Merge pull request #2179 from Gamboster/fix/transactMenuDisabledButtons
JohnathanWhite Jun 1, 2026
e90117e
Merge pull request #2174 from msalcala11/portfolio-offline
JohnathanWhite Jun 1, 2026
2ca4627
Fix: access token generation from transact details
Gamboster Jun 1, 2026
dbfc416
Fix: Add a prefix message for more readable embedded payments errors
Gamboster Jun 1, 2026
5f1fea4
BWC: Chore - Upgrade v11.10.0
cmgustavo Jun 1, 2026
7b074fa
Merge pull request #2182 from Gamboster/fix/transactDetailsGetAccesToken
JohnathanWhite Jun 1, 2026
8e51f24
Merge pull request #2186 from cmgustavo/chore/upgrade-bwc-11-10-0
JohnathanWhite Jun 1, 2026
d32bd75
Merge pull request #2183 from Gamboster/fix/embeddedApplePayPaymentEr…
JohnathanWhite Jun 1, 2026
5ec55c8
bump 14.43.1
JohnathanWhite May 22, 2026
9e8b5d3
bump 14.43.2
JohnathanWhite Jun 1, 2026
b819db3
bump 14.43.3
JohnathanWhite Jun 9, 2026
cd15518
BottomNotification: Fix - safe toUpperCase in BottomNotification actions
gabrielbazan7 Jun 2, 2026
ae1593f
Sentry: enhancement - add Sentry.ErrorBoundary and flush for reliable…
gabrielbazan7 Jun 8, 2026
930d390
Store: fix - clear bottomNotificationModalConfig on dismiss and black…
gabrielbazan7 Jun 8, 2026
d132219
Feat: moonpay challenges logs and analytics
Gamboster Jun 3, 2026
ae21856
Ref: use custom modal to show challenges
Gamboster Jun 4, 2026
56dcf58
Fix: only update values greater than zero in moonpayDetails
Gamboster Jun 4, 2026
3019355
Fix: enable embedded-buy with anonymousEid
Gamboster Jun 8, 2026
a77e9fc
Merge branch 'release/14.43' into bump-14.43
JohnathanWhite Jun 10, 2026
8cbf277
resolved merge conflict
JohnathanWhite Jun 11, 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
  •  
  •  
  •  
113 changes: 113 additions & 0 deletions .github/workflows/e2e-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: E2E Android

on:
workflow_dispatch:

concurrency:
group: e2e-android-${{ github.ref }}
cancel-in-progress: true

jobs:
e2e-android:
name: E2E Android Smoke
runs-on: ubuntu-latest
timeout-minutes: 60

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version-file: '.node-version'
cache: 'yarn'

- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Create env file
env:
ENV_FILE: ${{ secrets.ENV_DEVELOPMENT }}
run: |
echo "$ENV_FILE" > .env.development
echo "IS_MAESTRO=true" >> .env.development

- name: Create Sentry properties
run: |
echo "${{ secrets.SENTRY_PROPERTIES }}" > sentry.properties
echo "${{ secrets.SENTRY_PROPERTIES }}" > ios/sentry.properties
echo "${{ secrets.SENTRY_PROPERTIES }}" > android/sentry.properties

- name: Set native config values
run: yarn set:dev

- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle/wrapper/gradle-wrapper.properties') }}
restore-keys: gradle-

- name: Cache Maestro
uses: actions/cache@v4
with:
path: ~/.maestro
key: maestro-${{ runner.os }}
restore-keys: maestro-${{ runner.os }}

- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> $GITHUB_PATH

- name: Build Android APK (debug)
run: |
cd android
./gradlew assembleDebug --no-daemon

- name: Enable KVM for emulator
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: Start Android emulator
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 30
arch: x86_64
profile: pixel_6
avd-name: e2e-emulator
emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim
disable-animations: true
script: |
adb install android/app/build/outputs/apk/debug/app-debug.apk
maestro test .maestro/flows/ --format junit --output maestro-results.xml

- name: Upload test results
if: always()
uses: actions/upload-artifact@v5
with:
name: maestro-android-results
path: |
maestro-results.xml
~/.maestro/tests/
retention-days: 7

- name: Upload screenshots
if: always()
uses: actions/upload-artifact@v5
with:
name: maestro-android-screenshots
path: ~/.maestro/tests/**/*.png
retention-days: 7

140 changes: 140 additions & 0 deletions .github/workflows/e2e-ios.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
name: E2E iOS

on:
workflow_dispatch:

concurrency:
group: e2e-ios-${{ github.ref }}
cancel-in-progress: true

jobs:
e2e-ios:
name: E2E iOS Smoke
runs-on: macos-latest-xlarge
timeout-minutes: 75

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version: '20'

- name: Cache node_modules
id: cache-node-modules
uses: actions/cache@v4
with:
path: node_modules
key: node-modules-${{ hashFiles('yarn.lock') }}

- name: Install dependencies
if: steps.cache-node-modules.outputs.cache-hit != 'true'
run: yarn install --frozen-lockfile

- name: Generate DKLS vendor files
run: node ./scripts/generate-dkls-vendor.js

- name: Create env file
env:
ENV_FILE: ${{ secrets.ENV_DEVELOPMENT }}
run: |
echo "$ENV_FILE" > .env.development
echo "IS_MAESTRO=true" >> .env.development

- name: Create Sentry properties
run: |
echo "${{ secrets.SENTRY_PROPERTIES }}" > sentry.properties
echo "${{ secrets.SENTRY_PROPERTIES }}" > ios/sentry.properties
echo "${{ secrets.SENTRY_PROPERTIES }}" > android/sentry.properties

- name: Set native config values
run: yarn set:dev

- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '2.7.6'
bundler-cache: true

- name: Select Xcode
run: sudo xcode-select -switch /Applications/Xcode_16.4.app

- name: Clean Xcode caches
run: |
rm -rf ios/build
rm -rf ~/Library/Developer/Xcode/DerivedData || true

- name: Install CocoaPods
run: cd ios && bundle exec pod install

- name: Build iOS app for simulator
env:
CI: "1"
SENTRY_DISABLE_AUTO_UPLOAD: true
NODE_OPTIONS: "--max_old_space_size=8192"
run: |
export NODE_BINARY=$(which node)
export PATH="$(dirname "$NODE_BINARY"):$PATH"
xcodebuild \
-workspace ios/BitPayApp.xcworkspace \
-scheme BitPayApp \
-configuration Debug \
-sdk iphonesimulator \
-derivedDataPath ios/build \
-destination 'generic/platform=iOS Simulator' \
NODE_BINARY="$NODE_BINARY" \
SWIFT_ACTIVE_COMPILATION_CONDITIONS="DEBUG MAESTRO" \
FORCE_BUNDLING=YES \
ONLY_ACTIVE_ARCH=YES \
ARCHS=arm64 \
build

- name: Cache Maestro
uses: actions/cache@v4
with:
path: ~/.maestro
key: maestro-${{ runner.os }}
restore-keys: maestro-${{ runner.os }}

- name: Install Maestro
run: |
curl -Ls "https://get.maestro.mobile.dev" | bash
echo "$HOME/.maestro/bin" >> $GITHUB_PATH

- name: Boot simulator
run: |
UDID=$(xcrun simctl list devices available | grep -E "iPhone [0-9]" | head -1 | grep -E -o '\(([0-9A-F-]+)\)' | tr -d '()')
echo "Booting simulator: $UDID"
xcrun simctl boot "$UDID"
xcrun simctl bootstatus "$UDID" -b
echo "SIMULATOR_UDID=$UDID" >> $GITHUB_ENV

- name: Install app on simulator
run: xcrun simctl install "$SIMULATOR_UDID" ios/build/Build/Products/Debug-iphonesimulator/BitPayApp.app

- name: Run Maestro smoke tests
run: maestro test .maestro/flows/ --format junit --output maestro-results.xml
env:
MAESTRO_DRIVER_STARTUP_TIMEOUT: 600000

- name: Upload test results
if: always()
uses: actions/upload-artifact@v5
with:
name: maestro-ios-results
path: |
maestro-results.xml
~/.maestro/tests/
retention-days: 7

- name: Upload screenshots
if: always()
uses: actions/upload-artifact@v5
with:
name: maestro-ios-screenshots
path: |
~/.maestro/tests/**/*.png
./*.png
retention-days: 7
104 changes: 104 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
name: Tests

on:
push:
pull_request:

jobs:
formatting:
name: Formatting
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version-file: '.node-version'
cache: 'yarn'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Check formatting
run: yarn prettier:check

types:
name: Types
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version-file: '.node-version'
cache: 'yarn'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Validate types
run: yarn validate

lint:
name: Lint
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
permissions:
contents: read
pull-requests: write

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version-file: '.node-version'
cache: 'yarn'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Lint (changed lines only)
uses: reviewdog/action-eslint@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
eslint_flags: '--ext .js,.jsx,.ts,.tsx src/'
fail_on_error: true
filter_mode: diff_context

unit-tests:
name: Unit Tests
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v5

- name: Setup Node
uses: actions/setup-node@v5
with:
node-version-file: '.node-version'
cache: 'yarn'

- name: Install dependencies
run: yarn install --frozen-lockfile

- name: Run tests
run: yarn test:ci

- name: Upload coverage report
if: always()
uses: actions/upload-artifact@v5
with:
name: coverage-report
path: coverage/
retention-days: 7
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# Claude Code
.claude

# Maestro
android/samples/
.maestro/screenshots/

# OSX
#
.DS_Store
Expand Down
2 changes: 2 additions & 0 deletions .maestro/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
flows:
- flows/onboarding_to_home.yaml
Loading
Loading