Skip to content

chore: modernize the repo toolchain and add E2E tests - #672

Merged
nicolas-godefroy-dev merged 3 commits into
mainfrom
chore/repo-modernization
Nov 12, 2026
Merged

nicolas-godefroy-dev merged 3 commits into
mainfrom
chore/repo-modernization

Conversation

@nicolas-godefroy-dev

Copy link
Copy Markdown
Contributor

Summary

Modernizes the repo's toolchain and adds end-to-end tests for the example app.

  • Dependencies: Expo SDK 58.
  • Package manager: pnpm instead of yarn. Node is pinned in .tool-versions (mise).
  • Lint and format: oxlint and oxfmt instead of ESLint and Prettier.
  • Git hooks: lefthook instead of husky and lint-staged.
  • Config files: converted to TypeScript.
  • CI: workflows run on mise and pnpm, and every action is pinned to a commit SHA.
  • Example app: marked private, uses the Metro web bundler, and has one button per scenario plus a status line that the E2E flows read.
  • E2E (new workflow e2e.yml):
    • Maestro flows for iOS and Android, run on release builds: app launch, invalid client token, two concurrent requests, and cancelling the PayPal flow. The cancel flow needs a sandbox key; the others don't.
    • Playwright tests for the web build.
  • Android fix: a consumer ProGuard rule (android/consumer-rules.pro) keeps Room's database constructors, so minified release builds no longer crash at startup.
  • Docs: CLAUDE.md, plus CONTRIBUTING.md updated for the new toolchain and the E2E suites.

Motivation

The old yarn, ESLint and husky setup was out of date, and nothing tested the native bridge automatically. Setting up E2E also exposed a startup crash in minified Android release builds: Braintree pulls in WorkManager, which resolves to Room 2.6.1. R8 full mode then removed WorkDatabase_Impl's no-arg constructor, and the app crashed with NoSuchMethodException before any JS ran.

Testing

  • I tested this manually
  • I added automated tests

Jest, tsc, oxlint and oxfmt pass locally. The Maestro and Playwright suites run in e2e.yml on this PR. The sandbox flow (cancelling the PayPal flow) needs the PAYPAL_SANDBOX_TOKENIZATION_KEY repository secret and is skipped without it.

Documentation

  • I have added relevant documentation for my changes.
  • This PR does not result in any developer-facing changes.

Braintree pulls in WorkManager, which resolves to Room 2.6.1. Room 2.6's keep
rule names no members, so R8 full mode dropped WorkDatabase_Impl's no-arg
constructor and a minified release build crashed at startup with
NoSuchMethodException. Ship a consumer ProGuard rule that keeps it.
The example app now has one button per scenario (pay, invalid token, two
concurrent requests) and a status line the flows match on. Maestro flows cover
launch, the invalid-token error, the concurrent-request guard and, with a
Braintree sandbox key, cancelling the PayPal flow. Playwright checks the web
build. A new E2E workflow runs them on release builds for iOS, Android and web.
@nicolas-godefroy-dev
nicolas-godefroy-dev merged commit 47a97b9 into main Nov 12, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant