Skip to content

Add a Maestro flow, run on Android and iOS in CI - #131

Merged
joreilly merged 3 commits into
mainfrom
maestro
Oct 17, 2026
Merged

joreilly merged 3 commits into
mainfrom
maestro

Conversation

@joreilly

Copy link
Copy Markdown
Owner

Summary

  • Adds maestro/GalwayBus.flow, shared by both apps through appId: ${APP_ID}. It checks the empty My stops screen, opens Routes, then route 402, and waits for its map ("Updated …") before taking a screenshot.
  • android.yml: new maestro job that builds the APK and runs the flow with Maestro 2.11.0 on an API 32 emulator with KVM. Its build step passes GOOGLE_API_KEY from repo secrets, which the build already reads for the Maps SDK key.
  • ios.yml: after xcodebuild, which now writes to build/dd, runs the flow on a booted iPhone simulator. MapKit needs no key.
  • Artifacts: maestro-screenshot-<platform> on every run, plus maestro-debug-<platform> (including iOS crash reports) on failure.
  • Same setup as the other samples. Adds a line to the README's tests section.

Maps key

  • The repo doesn't have a GOOGLE_API_KEY secret yet. Until it's added, the Android map renders blank; the flow still passes because it checks text, not the map.
  • If the key is restricted to Android apps by package name plus SHA-1, CI's debug builds are signed with a debug keystore generated on the runner, so its SHA-1 won't match. The map tiles would then fail to load even with the secret set. Either allow this key without the SHA-1 restriction, or sign CI debug builds with a fixed keystore whose SHA-1 is added to the key.

Test plan

  • Flow passes locally on Android (Pixel 9a emulator, API 37, local Maps key)
  • Flow passes locally on iOS (iPhone 17 Pro, iOS 26.5)
  • Android CI maestro job green
  • iOS CI green
  • After adding the GOOGLE_API_KEY secret: the Android screenshot shows the map

🤖 Generated with Claude Code

https://claude.ai/code/session_01G317KNXo9kZndPaSEtMCuG

joreilly and others added 3 commits October 17, 2026 13:26
CI only built the apps, so runtime crashes went unnoticed. Add one flow
shared by both apps (app id passed via -e) that opens a route's live map,
and run it in each platform's workflow like the other samples. The Android
build gets the GOOGLE_API_KEY secret so the map renders once it's set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G317KNXo9kZndPaSEtMCuG
The default system image has no Google Play services, so the Maps SDK
shows "won't run without Google Play services" in place of the map,
whatever the API key.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G317KNXo9kZndPaSEtMCuG
On a cold macOS runner Maestro's iOS driver can take over the default
~2 minutes to come up ("iOS driver not ready in time"), failing the job
before the flow runs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G317KNXo9kZndPaSEtMCuG
@joreilly
joreilly merged commit 78f2dc8 into main Oct 17, 2026
4 checks passed
@joreilly
joreilly deleted the maestro branch October 17, 2026 13:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant