{"id":26404414,"url":"https://github.com/limbario/android-emulator-fleet","last_synced_at":"2025-03-17T16:34:57.836Z","repository":{"id":270504850,"uuid":"910562487","full_name":"limbario/android-emulator-fleet","owner":"limbario","description":"Get as many GPU-accelerated Android Emulators as you need for testing!","archived":false,"fork":false,"pushed_at":"2025-03-17T11:37:33.000Z","size":2132,"stargazers_count":4,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-17T12:36:02.530Z","etag":null,"topics":["android","appium","ci-cd","maestro","mobile","testing","ui-testing"],"latest_commit_sha":null,"homepage":"https://limbar.io","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/limbario.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-31T16:34:45.000Z","updated_at":"2025-03-17T11:37:34.000Z","dependencies_parsed_at":"2024-12-31T18:29:39.021Z","dependency_job_id":"73cf7b90-0753-4b68-a0fd-755642194bbd","html_url":"https://github.com/limbario/android-emulator-fleet","commit_stats":null,"previous_names":["limbario/run-android","limbario/android-emulator-fleet"],"tags_count":10,"template":false,"template_full_name":"actions/typescript-action","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limbario%2Fandroid-emulator-fleet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limbario%2Fandroid-emulator-fleet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limbario%2Fandroid-emulator-fleet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/limbario%2Fandroid-emulator-fleet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/limbario","download_url":"https://codeload.github.com/limbario/android-emulator-fleet/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244069427,"owners_count":20393014,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","appium","ci-cd","maestro","mobile","testing","ui-testing"],"created_at":"2025-03-17T16:34:57.160Z","updated_at":"2025-03-17T16:34:57.827Z","avatar_url":"https://github.com/limbario.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Android Emulator Fleet\n\n![Continuous Integration](https://github.com/limbario/android-emulator-fleet/actions/workflows/ci.yml/badge.svg?branch=main)\n![GitHub License](https://img.shields.io/github/license/limbario/android-emulator-fleet)\n\nRun this action to create remote GPU-accelerated Android emulators in\n[Limbar Cloud](https://limbar.io) so that you can run all your automated UI\ntests in parallel saving you a lot of time. Just like the big clouds, you are\nnever charged for concurrency - get as many instances as you need and pay only\nfor what you use.\n\n## Example usage\n\nThe following step will create a new Android emulator instance in the default\norganization and region, and connect to it. Once it's available, which usually\ntakes less than a second, you can start all the mobile testing automation tools\nyou have, like `maestro`, Appium, Behave and the rest.\n\nOnce the GitHub workflow completes, a post-action step will clean up the\ninstance.\n\n```yaml\n- name: Run Android\n  uses: limbario/run-android@v0.4.7\n  with:\n    token: ${{ secrets.LIM_TOKEN }}\n\n- name: Run tests\n  run: ./gradlew connectedCheck --stacktrace\n```\n\nGo to [Limbar Console](https://console.limbar.io) and watch while your tests are\nexecuted.\n\n\u003c!-- markdownlint-disable MD033 MD013 --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"android-screen-macos.webp\" alt=\"limbar.io online android emulator instance used in mobile app testing\" title=\"Limbar emulator instance used in mobile app testing\" width=\"50%\"\u003e\n\u003c/p\u003e\n\u003c!-- markdownlint-enable MD033 MD013 --\u003e\n\n## How it works\n\nWhat this action does is run the following as many as the `count` times as\n`count` parameter is given:\n\n```bash\nlim run android --stream=false\n```\n\nThen in the next steps, you can use all the commands that work with Android:\n\n```bash\n# See the list of connected devices.\nadb devices\n\n# Install your app.\nadb install apk/pr-debug.apk\n```\n\nTools such as `maestro`, `Appium` and `Behave` also recognize the Android\nemulator instances and can run tests on them.\n\nWhile the tests are executing, you can watch the Android emulator screens live\nby going to [Limbar Console](https://console.limbar.io) and get the\n`lim connect` command to stream the screen to your desktop live like the\nfollowing:\n\n```bash\nlim connect android 5oe2g0ut40\n```\n\n```txt\n✓ Checking your token 📜\n✓ Fetching instance information\n✓ Tunnel is ready for adb at localhost:65040 🚇\n⠧ Ready to control the device 🕹️\n```\n\nSee more details in the [Limbar documentation](https://docs.limbar.io/docs).\n\n## Testing with 20 Android Emulators in Parallel\n\nIn [Limbar](https://limbar.io), you can have as many remote Android emulator\ninstances as you need without additional cost to quickly finish all the tests\nyour app has. A `count` parameter is provided to utilize this so that you don't\nhave to have a separate GitHub Actions job for every Android emulator instance.\n\nThe following GitHub Actions steps does the following:\n\n- Provision 20 Android Emulator instances at once,\n- Install your app's APK file to all of them,\n- Run `maestro` with `--shard-split=20` flag so that it utilizes all 20 of the\n  Android emulator instances in parallel.\n\nIncrease the count as many as your UI tests so that you can iterate on the\nresults quickly and save great amount of time.\n\n```yaml\n- name: Run Android\n  uses: limbario/run-android@v0.4.7\n  with:\n    token: ${{ secrets.LIM_TOKEN }}\n    count: 20\n\n- name: Install APK in parallel\n  run: |\n    #!/bin/bash\n    # Get all connected devices\n    devices=$(adb devices | grep -v \"List\" | grep \"localhost\" | cut -f1)\n    # Install APK on each device in parallel\n    for device in $devices; do\n        (\n            echo \"Installing on device: $device\"\n            adb -s $device install apk/pr-debug.apk\n        ) \u0026\n    done\n    # Wait for all parallel installations to complete\n    wait\n    echo \"Installation completed on all devices\"\n\n- name: Run Tests in parallel\n  run: |\n    maestro test .maestro --shard-split=20\n```\n\nYou can watch the Android emulator screens while the tests are ongoing by going\nto [Limbar Console](https://console.limbar.io) and get the `lim connect` command\nto stream the screen to your desktop live.\n\n## Inputs\n\n### `token`\n\n**Required** The token to use to authenticate with Limbar.\n\nYou can get this token in [Limbar Console](https://console.limbar.io/settings).\n\n### `organization-id`\n\n**Optional** The organization to create the Android instance in. If not given,\nthe default organization from the token is used.\n\nYou can get this ID in [Limbar Console](https://console.limbar.io/settings) but\norganization tokens already contain it, so in most cases, you don't need to\nsupply this.\n\n### `region`\n\n**Optional** The region to create the Android instance in. The closest one is\nchosen if not given.\n\nSee [Limbar Console](https://console.limbar.io) for a list of regions or run\n`lim regions`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimbario%2Fandroid-emulator-fleet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flimbario%2Fandroid-emulator-fleet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flimbario%2Fandroid-emulator-fleet/lists"}