You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+29Lines changed: 29 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -256,9 +256,38 @@ release/v0.2.0
256
256
hotfix/cli-regression
257
257
```
258
258
259
+
### E2E tests (Maestro)
260
+
261
+
End-to-end tests use [Maestro](https://maestro.dev/) to drive the hello-world example on real emulators and simulators.
262
+
263
+
```bash
264
+
# Install Maestro (one-time)
265
+
curl -Ls "https://get.maestro.mobile.dev"| bash
266
+
267
+
# For iOS, also install idb-companion
268
+
brew tap facebook/fb && brew install idb-companion
269
+
```
270
+
271
+
Build and launch the app first, then run the tests:
272
+
273
+
```bash
274
+
cd examples/hello-world
275
+
276
+
# Android (emulator must be running)
277
+
pn run android
278
+
maestro test ../../tests/e2e/android.yaml
279
+
280
+
# iOS (simulator must be running; --platform ios needed when an Android emulator is also connected)
281
+
pn run ios
282
+
maestro --platform ios test ../../tests/e2e/ios.yaml
283
+
```
284
+
285
+
Test flows live in `tests/e2e/flows/` and cover main page rendering, counter interaction, and multi-page navigation. The `e2e.yml` workflow runs these automatically on pushes to `main` and PRs.
286
+
259
287
### CI
260
288
261
289
-**CI** (`ci.yml`): runs formatter, linter, type checker, and tests on every push and PR.
290
+
-**E2E** (`e2e.yml`): builds the hello-world example on Android (Linux emulator) and iOS (macOS simulator), then runs Maestro flows. Triggers on pushes to `main`, PRs, and manual dispatch.
262
291
-**PR Lint** (`pr-lint.yml`): validates the PR title against Conventional Commits format (protects squash merges) and checks individual commit messages via commitlint (protects rebase merges). Recommended: add the **PR title** job as a required status check in branch-protection settings.
263
292
-**Release** (`release.yml`): runs on merge to `main`; computes version, generates changelog, tags, creates GitHub Release, and (when `DRAFT_RELEASE` is `"false"`) publishes to PyPI.
264
293
-**Docs** (`docs.yml`): deploys documentation to GitHub Pages on push to `main`.
0 commit comments