GitHub Actions is the recommended way to run mobile tests automatically.
You only need to provide an iOS Simulator build or Android APK and your TesterArmy credentials. TesterArmy handles the cloud simulator/emulator setup, app installation, test execution, and run orchestration for you, so you do not need to manage devices in your CI pipeline.
For Expo EAS workflows, see Expo EAS.
Before you set it up, make sure you have already:
If you want a working reference, see the mobile GitHub Action and the mobile example app.
Add these GitHub secrets to your repository:
You can copy the group ID from the test group menu in the dashboard.
The most reliable setup is:
.app bundle or .apk as a GitHub artifact.tester-army/mobile-github-action with the matching platform to upload the app, run the group, wait for results, and clean up.No manual upload step in CI
The GitHub Action accepts either a .app directory, an archived iOS app file,
or an Android .apk. If you pass a .app directory, the action zips and
uploads it for you.
tester-army/mobile-github-action handles the full CI flow for you:
Results are written to the GitHub step summary so you can quickly see pass/fail status, duration, issues, and screenshots.
For CI providers such as Expo EAS, Fastlane, Buildkite, or GitLab CI, upload the
app with testerarmy upload-app, then use the returned app ID in the
provider-agnostic CLI flow:
Use --platform android for Android app runs. ci calls
POST /api/v1/groups/{groupId}/runs, waits for every returned run to finish,
and deletes only the explicit --app-id when cleanup is enabled and the run did
not time out.
To run the dynamic PR agent against a mobile build instead of a predefined test group, call the pull request run API with platform: "ios" or "android" and a mobile app selector:
Use platform: "ios" with an iOS Simulator .app build or platform: "android" with an Android .apk. You can use mobile.appId, mobile.bundleId, or mobile.artifactUrl with mobile.artifactFilename. The endpoint does not require changed files; if a supported GitHub connection exists, TesterArmy enriches the plan server-side.
The action exposes these outputs:
app_id — the uploaded TesterArmy app IDrun_ids — a JSON array of created run IDsoverall_status — passed, failed, or timed_outYou can use overall_status in later workflow steps if you want custom reporting or notifications.
Make sure you are passing an iOS Simulator .app / .app.zip or an Android .apk. An .ipa, .aab, or .xapk will not work.
Double-check the app path inside the build job. The most common iOS output path is:
For Android release .apk files, the output is usually under:
Make sure your TESTERARMY_GROUP_ID points to a group that already contains mobile tests.