Compare commits

..
623 Commits
Author SHA1 Message Date
budi 4fe7dfdd39 Updated base image 2026-03-19 15:42:46 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c86a077767 [github-action] Bump docker/setup-buildx-action from 3 to 4 (#572)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-06 10:41:12 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
d4d79d2b7a [pip] Bump coverage from 7.13.3 to 7.13.4 (#571)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.13.3 to 7.13.4.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.13.3...7.13.4)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 08:13:05 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1326fc493f [pip] Bump setuptools from 80.10.2 to 82.0.0 (#570)
Bumps [setuptools](https://github.com/pypa/setuptools) from 80.10.2 to 82.0.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.10.2...v82.0.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 82.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-10 08:12:46 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
a28137f92f [pip] Bump coverage from 7.13.2 to 7.13.3 (#568)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.13.2 to 7.13.3.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.13.2...7.13.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 10:16:38 +01:00
Luca FabbianandGitHub a46dcf1825 Update README with updated WSL2 nested virtualization setup (#567)
Updated instructions for configuring WSL2 on newer versions.
2026-02-02 09:11:07 +01:00
budi 4459fffdb2 Added user permission for kvm usage 2026-01-29 15:18:07 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c47e5efdad [pip] Bump coverage from 7.13.1 to 7.13.2 (#565)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.13.1 to 7.13.2.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.13.1...7.13.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 14:47:20 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
149e55b52d [pip] Bump setuptools from 80.9.0 to 80.10.2 (#564)
Bumps [setuptools](https://github.com/pypa/setuptools) from 80.9.0 to 80.10.2.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.9.0...v80.10.2)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 80.10.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-29 14:47:01 +01:00
budi f5e57eecef Updated base image 2026-01-29 14:45:24 +01:00
budi 621d37d7d1 Updated .dockerignore 2026-01-26 15:12:58 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
66fab80a5b [pip] Bump coverage from 7.12.0 to 7.13.1 (#561)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.12.0 to 7.13.1.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.12.0...7.13.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.13.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-07 16:53:28 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
97bd5ae254 [pip] Bump pytest from 9.0.1 to 9.0.2 (#557)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.1 to 9.0.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/9.0.1...9.0.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-08 10:50:41 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b69020fc03 [github-action] Bump actions/checkout from 5 to 6 (#556)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-21 09:11:58 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Budi Utomo
04da87e3e4 [pip] Bump coverage from 7.11.3 to 7.12.0 (#555)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.11.3 to 7.12.0.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/compare/7.11.3...7.12.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Budi Utomo <budtmo.os@gmail.com>
2025-11-19 08:38:42 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
80134ce080 [pip] Bump click from 8.3.0 to 8.3.1 (#554)
Bumps [click](https://github.com/pallets/click) from 8.3.0 to 8.3.1.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.3.0...8.3.1)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-19 08:37:32 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
fbfe4a08d7 [pip] Bump pytest from 9.0.0 to 9.0.1 (#553)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 9.0.0 to 9.0.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/9.0.0...9.0.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-17 08:59:00 +01:00
budi d03f14dadf Updated base image 2025-11-14 09:38:00 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
4b64e87ab2 [pip] Bump pytest from 8.4.2 to 9.0.0 (#550)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.4.2 to 9.0.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.2...9.0.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 9.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-13 08:20:33 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8f4b541d49 [pip] Bump coverage from 7.11.0 to 7.11.3 (#549)
Bumps [coverage](https://github.com/coveragepy/coveragepy) from 7.11.0 to 7.11.3.
- [Release notes](https://github.com/coveragepy/coveragepy/releases)
- [Changelog](https://github.com/coveragepy/coveragepy/blob/main/CHANGES.rst)
- [Commits](https://github.com/coveragepy/coveragepy/commits)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.11.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-13 08:20:13 +01:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
71f3fe64d6 [pip] Bump coverage from 7.10.7 to 7.11.0 (#544)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.7 to 7.11.0.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.7...7.11.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-17 04:59:55 +02:00
budi 5c6b28b530 Updated base image 2025-10-10 10:52:37 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
f847fbb4db [pip] Bump click from 8.2.1 to 8.3.0 (#543)
Bumps [click](https://github.com/pallets/click) from 8.2.1 to 8.3.0.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.2.1...8.3.0)

---
updated-dependencies:
- dependency-name: click
  dependency-version: 8.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-08 09:13:42 +02:00
budi 564a1491ff Updated base images 2025-10-03 07:08:52 +02:00
Dave GolombekandGitHub a89d4679be Bump GMSAAS version to 1.15.0 (#540)
### Description

Gmsaas had a major update in 1.15.0 which addresses adb connection
issues (OpenSSL 3 is now used for ADB Tunnel instead of OpenSSL 1.1.1).
2025-09-24 08:58:52 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9290e90e3c [pip] Bump coverage from 7.10.6 to 7.10.7 (#538)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.6 to 7.10.7.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.6...7.10.7)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-22 15:57:07 +02:00
budi 136b49fab8 Updated base image 2025-09-17 10:54:41 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c5651e78f9 [pip] Bump pytest-cov from 6.3.0 to 7.0.0 (#536)
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 6.3.0 to 7.0.0.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.3.0...v7.0.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-version: 7.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-10 08:17:58 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>Budi Utomo
76ae526591 [pip] Bump pytest from 8.4.1 to 8.4.2 (#533)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.4.1 to 8.4.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.1...8.4.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 8.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Budi Utomo <budtmo.os@gmail.com>
2025-09-08 10:26:31 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
46805d6a81 [pip] Bump pytest-cov from 6.2.1 to 6.3.0 (#534)
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 6.2.1 to 6.3.0.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-cov/compare/v6.2.1...v6.3.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-version: 6.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 10:24:52 +02:00
budi 6302de6bc4 Updated base image 2025-09-03 13:55:28 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1e1c60fc89 [pip] Bump coverage from 7.10.5 to 7.10.6 (#532)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.5 to 7.10.6.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.5...7.10.6)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 11:47:29 +02:00
Juan Pedro Bretti MandaranoandGitHub 2a12e66077 Fix typo in WSL configuration file name (#531)
There is no documentation that file `/etc/wsl2.conf` does exist.
According to Microsoft documentation, it is called `/etc/wsl.conf`. 

See https://learn.microsoft.com/en-us/windows/wsl/wsl-config for reference.
2025-09-01 11:47:09 +02:00
budi f2a418d712 Updated base image 2025-08-28 11:25:11 +02:00
budi 44dcc5b166 Updated novnc and websockify 2025-08-25 15:42:55 +02:00
budi 2e88c06124 Updated base image 2025-08-25 15:42:20 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
6b34c74a25 [pip] Bump coverage from 7.10.4 to 7.10.5 (#530)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.4 to 7.10.5.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.4...7.10.5)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-25 02:06:36 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
1fc2c74d8c [pip] Bump requests from 2.32.3 to 2.32.5 (#528)
Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.5.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.5)

---
updated-dependencies:
- dependency-name: requests
  dependency-version: 2.32.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-20 08:21:10 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ffbafe87e8 [github-action] Bump actions/checkout from 4 to 5 (#523)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-19 10:53:54 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
62fa6a05c8 [pip] Bump coverage from 7.10.3 to 7.10.4 (#527)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.3 to 7.10.4.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.3...7.10.4)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-19 10:42:11 +02:00
lilinorandGitHub 77542f5b45 Start and stop SaaS devices in parallel (#524) 2025-08-19 09:57:05 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
39df955c26 [pip] Bump coverage from 7.10.2 to 7.10.3 (#522)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.2 to 7.10.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.2...7.10.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-13 06:13:47 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
8da596a8f1 [pip] Bump coverage from 7.10.1 to 7.10.2 (#521)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.1 to 7.10.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.1...7.10.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-10 10:20:17 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7f55b248fd [pip] Bump coverage from 7.10.0 to 7.10.1 (#520)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.10.0 to 7.10.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.10.0...7.10.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-01 00:46:37 +02:00
budi c434ae7770 Updated base image 2025-07-31 19:04:33 +02:00
budi ff9f9268e3 Updated docu 2025-07-28 12:49:43 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
27e95cd197 [pip] Bump coverage from 7.9.2 to 7.10.0 (#519)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.9.2 to 7.10.0.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.9.2...7.10.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-25 09:39:58 +02:00
budi 1f1224599e Modified github action build 2025-07-04 10:09:16 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
846cd2ed09 [pip] Bump coverage from 7.8.1 to 7.9.2 (#516)
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.8.1 to 7.9.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.8.1...7.9.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-version: 7.9.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-04 08:54:21 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
b5fbe9777e [pip] Bump pytest-xdist from 3.7.0 to 3.8.0 (#515)
Bumps [pytest-xdist](https://github.com/pytest-dev/pytest-xdist) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/pytest-dev/pytest-xdist/releases)
- [Changelog](https://github.com/pytest-dev/pytest-xdist/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest-xdist/compare/v3.7.0...v3.8.0)

---
updated-dependencies:
- dependency-name: pytest-xdist
  dependency-version: 3.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-02 08:27:44 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
21ffb20ca6 [pip] Bump setuptools from 80.8.0 to 80.9.0 (#513)
Bumps [setuptools](https://github.com/pypa/setuptools) from 80.8.0 to 80.9.0.
- [Release notes](https://github.com/pypa/setuptools/releases)
- [Changelog](https://github.com/pypa/setuptools/blob/main/NEWS.rst)
- [Commits](https://github.com/pypa/setuptools/compare/v80.8.0...v80.9.0)

---
updated-dependencies:
- dependency-name: setuptools
  dependency-version: 80.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 17:00:40 +02:00
budi c0368d3d71 Updated base image and adjusted 2025-06-26 23:10:08 +02:00
Dave GolombekandGitHub 6e5ed8386a Add Genymotion auth tokens (#512)
As described in #511, Genymotion has deprecated credential based
login. This adds support for passing in an auth token instead.

This could also check for the GENYMOTION_API_TOKEN env variable being
set and skipping the login entirely, but I haven't added that in favor
of keeping the explicit token check during login.

This also updates the default version of the gmsaas package to the
latest release.
2025-06-20 08:42:58 +02:00
budi 602dcf15a7 Updated ubuntu on the runner 2025-04-28 11:15:58 +02:00
budi 1dd79c6188 Updated base image 2025-04-28 11:10:20 +02:00
budi 7abe6c19d8 Updated ubuntu on the runner 2025-04-28 11:09:42 +02:00
Jiří ČernýandGitHub eb91462bd4 Allow to override emulator config from config file defined by path in EVN (#492) 2025-04-28 11:08:52 +02:00
Budi UtomoandGitHub ac251e7704 Merge pull request #493 from jirkace/device_pixel
Allow to use Pixel C as emulator device
2025-03-11 08:37:56 +01:00
blackie b997803064 Allow to use Pixel C as emulator device 2025-03-11 00:07:47 +01:00
Budi UtomoandGitHub 88dbde577e Merge pull request #491 from budtmo/dependabot/pip/master/mock-5.2.0
[pip] Bump mock from 5.1.0 to 5.2.0
2025-03-04 14:41:52 +01:00
dependabot[bot]andGitHub a51e451a1f [pip] Bump mock from 5.1.0 to 5.2.0
Bumps [mock](https://github.com/testing-cabal/mock) from 5.1.0 to 5.2.0.
- [Changelog](https://github.com/testing-cabal/mock/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/testing-cabal/mock/compare/5.1.0...5.2.0)

---
updated-dependencies:
- dependency-name: mock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-04 00:45:42 +00:00
budi 0f8d8eb98b Updated base image 2025-02-21 13:48:42 +01:00
budtmo 97b3ca2c28 Updated documentation 2025-01-27 16:38:31 +01:00
budtmo 7b599fe7ea Updated base image 2025-01-27 16:35:20 +01:00
budtmo 34846cd059 Downgraded coverage 2025-01-11 17:38:19 +01:00
budtmo 8df9081573 Updated base image 2025-01-11 17:30:41 +01:00
Budi UtomoandGitHub 9f0c0dcfd2 Merge pull request #477 from budtmo/dependabot/pip/master/coverage-7.6.10
[pip] Bump coverage from 7.6.1 to 7.6.10
2025-01-11 17:29:41 +01:00
dependabot[bot]andGitHub e8186fb6bf [pip] Bump coverage from 7.6.1 to 7.6.10
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.6.1 to 7.6.10.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.6.1...7.6.10)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-11 16:28:32 +00:00
Budi UtomoandGitHub f33fc1906c Merge pull request #474 from budtmo/dependabot/pip/master/click-8.1.8
[pip] Bump click from 8.1.7 to 8.1.8
2025-01-11 17:27:32 +01:00
dependabot[bot]andGitHub be3150f39f [pip] Bump click from 8.1.7 to 8.1.8
Bumps [click](https://github.com/pallets/click) from 8.1.7 to 8.1.8.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.1.7...8.1.8)

---
updated-dependencies:
- dependency-name: click
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-23 00:19:46 +00:00
budtmo 5688826f1a Updated appium-docker-android image 2024-09-26 14:40:22 +02:00
budtmo 7064a9bc2c Updated Appium base image to version v2.11.2-p0 2024-08-07 13:39:31 +02:00
Budi UtomoandGitHub 4e44e68946 Merge pull request #448 from rlneumiller/patch-1
Update README.md
2024-08-05 08:17:43 +02:00
Budi UtomoandGitHub 2cb2bd6256 Merge pull request #453 from budtmo/dependabot/pip/master/coverage-7.6.1
[pip] Bump coverage from 7.5.4 to 7.6.1
2024-08-05 08:17:11 +02:00
dependabot[bot]andGitHub 3af8eb3f48 [pip] Bump coverage from 7.5.4 to 7.6.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.5.4 to 7.6.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.5.4...7.6.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-04 23:56:03 +00:00
ArrellandGitHub 55a628a673 Update README.md
Grammar policing.
2024-07-16 11:35:34 +01:00
budtmo 667787bada Updated Appium base image to version v2.11.1-p0 2024-07-09 10:58:32 +02:00
Budi UtomoandGitHub cc5806bf71 Merge pull request #441 from budtmo/dependabot/pip/master/autopep8-2.3.1
[pip] Bump autopep8 from 2.2.0 to 2.3.1
2024-06-30 18:15:08 +02:00
Budi UtomoandGitHub db58150cf8 Merge pull request #440 from budtmo/dependabot/pip/master/coverage-7.5.4
[pip] Bump coverage from 7.5.3 to 7.5.4
2024-06-30 18:14:47 +02:00
dependabot[bot]andGitHub 26206e43bd [pip] Bump autopep8 from 2.2.0 to 2.3.1
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.2.0 to 2.3.1.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.2.0...v2.3.1)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-23 23:18:37 +00:00
dependabot[bot]andGitHub a0851223da [pip] Bump coverage from 7.5.3 to 7.5.4
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.5.3 to 7.5.4.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.5.3...7.5.4)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-23 23:18:31 +00:00
Budi UtomoandGitHub 1b05bfafdc Merge pull request #436 from budtmo/dependabot/pip/master/autopep8-2.2.0
[pip] Bump autopep8 from 2.1.1 to 2.2.0
2024-06-11 08:18:52 +02:00
Budi UtomoandGitHub e1ff20db98 Merge pull request #435 from budtmo/dependabot/pip/master/requests-2.32.3
[pip] Bump requests from 2.32.2 to 2.32.3
2024-06-11 08:18:35 +02:00
Budi UtomoandGitHub df2dfbf6e1 Merge pull request #433 from budtmo/dependabot/pip/master/coverage-7.5.3
[pip] Bump coverage from 7.5.1 to 7.5.3
2024-06-11 08:18:11 +02:00
dependabot[bot]andGitHub 03a6754869 [pip] Bump autopep8 from 2.1.1 to 2.2.0
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.1.1 to 2.2.0.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.1.1...v2.2.0)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-30 23:23:34 +00:00
dependabot[bot]andGitHub 99efbd21a5 [pip] Bump requests from 2.32.2 to 2.32.3
Bumps [requests](https://github.com/psf/requests) from 2.32.2 to 2.32.3.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.32.2...v2.32.3)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-29 23:47:24 +00:00
dependabot[bot]andGitHub 05d3622c64 [pip] Bump coverage from 7.5.1 to 7.5.3
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.5.1 to 7.5.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.5.1...7.5.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 23:47:35 +00:00
Budi UtomoandGitHub 232ed8bbe6 Merge pull request #429 from budtmo/dependabot/pip/master/autopep8-2.1.1
[pip] Bump autopep8 from 2.1.0 to 2.1.1
2024-05-23 23:06:07 +02:00
dependabot[bot]andGitHub 20b1c6f71b [pip] Bump autopep8 from 2.1.0 to 2.1.1
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.1.0 to 2.1.1.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.1.0...v2.1.1)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-22 23:08:38 +00:00
Budi UtomoandGitHub 4417553044 Merge pull request #428 from budtmo/dependabot/pip/master/requests-2.32.2
[pip] Bump requests from 2.32.1 to 2.32.2
2024-05-22 12:50:50 +02:00
dependabot[bot]andGitHub 050144f8da ---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-21 23:24:08 +00:00
Budi UtomoandGitHub 5b25d2fb79 Merge pull request #426 from budtmo/dependabot/pip/master/requests-2.32.1
[pip] Bump requests from 2.31.0 to 2.32.1
2024-05-21 17:23:28 +02:00
dependabot[bot]andGitHub b5aa9c1290 ---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-20 23:17:46 +00:00
Budi UtomoandGitHub 7e8a082936 Merge pull request #422 from budtmo/dependabot/pip/master/coverage-7.5.1
[pip] Bump coverage from 7.5.0 to 7.5.1
2024-05-06 11:01:52 +02:00
dependabot[bot]andGitHub 0eb43bee45 [pip] Bump coverage from 7.5.0 to 7.5.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.5.0 to 7.5.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.5.0...7.5.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-05 23:15:12 +00:00
budtmo 0702f34bd3 Reverted the change on PR #403 2024-05-03 17:59:42 +02:00
Budi UtomoandGitHub fbd31b9076 Merge pull request #403 from enrey/restart_fix
Fixed docker container stop/start blank background error
2024-05-03 15:32:53 +02:00
Budi UtomoandGitHub 40864137ee Merge pull request #417 from fsackur/410-doc-persistence
Added note about data volume
2024-05-03 15:30:04 +02:00
Budi UtomoandGitHub c5cce78990 Merge pull request #421 from muvaf/patch-1
Disable the nested virtualization warning by default.
2024-05-03 15:29:39 +02:00
budtmo 5002255cd8 Updated base image from 2.5.1-p0 to 2.5.4-p0 2024-05-03 15:29:10 +02:00
muvaffakandGitHub f570984135 Disable the nested virtualization warning by default. 2024-04-27 22:33:53 +03:00
Budi UtomoandGitHub 80e22c2b1c Merge pull request #420 from budtmo/dependabot/pip/master/coverage-7.5.0
[pip] Bump coverage from 7.4.4 to 7.5.0
2024-04-27 12:15:09 +02:00
dependabot[bot]andGitHub 064e9c4f37 [pip] Bump coverage from 7.4.4 to 7.5.0
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.4 to 7.5.0.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.4.4...7.5.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 23:52:01 +00:00
Freddie Sackur 7db92991ab Added note about data volume 2024-04-11 12:03:21 +01:00
Budi UtomoandGitHub 47eafe24e1 Merge pull request #414 from budtmo/dependabot/pip/master/autopep8-2.1.0
[pip] Bump autopep8 from 2.0.4 to 2.1.0
2024-03-21 07:58:16 +01:00
Budi UtomoandGitHub 8875d83305 Merge pull request #413 from budtmo/dependabot/pip/master/coverage-7.4.4
[pip] Bump coverage from 7.4.3 to 7.4.4
2024-03-21 07:58:00 +01:00
dependabot[bot]andGitHub 984f5ed69e [pip] Bump autopep8 from 2.0.4 to 2.1.0
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.0.4 to 2.1.0.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.0.4...v2.1.0)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-18 01:14:53 +00:00
dependabot[bot]andGitHub a02375de57 [pip] Bump coverage from 7.4.3 to 7.4.4
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.3 to 7.4.4.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.4.3...7.4.4)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-15 00:54:05 +00:00
Budi Utomo cebf34d8ae Updated base image to version 2.5.1-p0 2024-03-14 09:22:34 +01:00
Budi UtomoandGitHub 6da341bf6b Merge pull request #409 from budtmo/dependabot/pip/master/coverage-7.4.3
[pip] Bump coverage from 7.4.2 to 7.4.3
2024-03-01 07:44:15 +01:00
dependabot[bot]andGitHub 5f1ea4c1e5 [pip] Bump coverage from 7.4.2 to 7.4.3
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.2 to 7.4.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.4.2...7.4.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-26 01:22:16 +00:00
Budi UtomoandGitHub b35f538bf3 Merge pull request #408 from budtmo/dependabot/pip/master/coverage-7.4.2
[pip] Bump coverage from 7.4.1 to 7.4.2
2024-02-22 08:00:51 +01:00
dependabot[bot]andGitHub 67321bdac7 [pip] Bump coverage from 7.4.1 to 7.4.2
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.1 to 7.4.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.4.1...7.4.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-02-21 00:32:26 +00:00
budtmo baefa67e3f Updated base image to v2.5.0-p0 2024-02-09 12:16:40 +01:00
Budi UtomoandGitHub 58f64cd2ee Merge pull request #406 from budtmo/dependabot/pip/master/coverage-7.4.1
[pip] Bump coverage from 7.4.0 to 7.4.1
2024-02-02 11:34:19 +01:00
dependabot[bot]andGitHub 2b56bab0bc [pip] Bump coverage from 7.4.0 to 7.4.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.4.0 to 7.4.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.4.0...7.4.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-01-29 00:47:02 +00:00
budtmo 05ce63f360 Updated base image 2024-01-23 10:22:39 +01:00
Budi UtomoandGitHub fd4089d98e Updated documentation 2024-01-23 00:03:30 +01:00
Andrey K 363fc77b87 Fixed docker stop/start 'sudo: unknown user: root' error 2024-01-08 21:55:22 +03:00
budtmo b9f02023b4 Added Android 14 in pipeline 2024-01-04 11:59:34 +01:00
budtmo cabad42452 Added Android 14 2024-01-04 11:50:50 +01:00
budtmo deb9180bc7 Updated Appium base image 2024-01-03 09:25:52 +01:00
Budi UtomoandGitHub 9d85ad345e Merge pull request #402 from budtmo/dependabot/pip/master/coverage-7.4.0
[pip] Bump coverage from 7.3.3 to 7.4.0
2024-01-03 08:30:45 +01:00
dependabot[bot]andGitHub 9d3f37ca0c [pip] Bump coverage from 7.3.3 to 7.4.0
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.3 to 7.4.0.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.3.3...7.4.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-28 01:06:07 +00:00
Budi UtomoandGitHub 8cd6bfb3ef Merge pull request #400 from budtmo/dependabot/pip/master/coverage-7.3.3
[pip] Bump coverage from 7.3.2 to 7.3.3
2023-12-18 08:02:47 +01:00
Budi UtomoandGitHub 4f0ddc972a Merge pull request #397 from budtmo/dependabot/github_actions/master/actions/setup-python-5
[github-action] Bump actions/setup-python from 4 to 5
2023-12-15 22:15:54 +01:00
dependabot[bot]andGitHub 703c1216cf [pip] Bump coverage from 7.3.2 to 7.3.3
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.2 to 7.3.3.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.3.2...7.3.3)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-15 00:13:45 +00:00
dependabot[bot]andGitHub 0ecc00587e [github-action] Bump actions/setup-python from 4 to 5
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-12-07 00:21:54 +00:00
budtmo d69e7c7dd0 Updated base image to version v2.2.2-p0 2023-11-22 10:15:08 +01:00
Budi UtomoandGitHub 8f15a2845f Merge pull request #391 from budtmo/dependabot/pip/master/coverage-7.3.2
[pip] Bump coverage from 7.3.1 to 7.3.2
2023-10-04 17:50:49 +02:00
dependabot[bot]andGitHub 9cee77998f [pip] Bump coverage from 7.3.1 to 7.3.2
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.3.1...7.3.2)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-02 23:38:55 +00:00
budtmo 13bd9611d7 Updated Appium base image 2023-09-22 12:23:13 +02:00
Budi UtomoandGitHub 9d5ab2dbe1 Merge pull request #386 from budtmo/dependabot/pip/master/coverage-7.3.1
[pip] Bump coverage from 7.3.0 to 7.3.1
2023-09-07 08:33:43 +02:00
dependabot[bot]andGitHub 9a5f560a73 [pip] Bump coverage from 7.3.0 to 7.3.1
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.3.0...7.3.1)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-06 23:22:54 +00:00
Budi UtomoandGitHub c1538606d2 Merge pull request #385 from budtmo/dependabot/github_actions/master/actions/checkout-4
[github-action] Bump actions/checkout from 3 to 4
2023-09-05 08:04:22 +02:00
dependabot[bot]andGitHub e706fedd12 [github-action] Bump actions/checkout from 3 to 4
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-09-04 23:54:20 +00:00
budtmo 4eb85fbf28 Updated base image to version 2.1.3-p0 2023-08-30 15:46:39 +02:00
Budi UtomoandGitHub 64b922c734 Merge pull request #384 from budtmo/dependabot/pip/master/autopep8-2.0.4
[pip] Bump autopep8 from 2.0.2 to 2.0.4
2023-08-28 08:03:07 +02:00
dependabot[bot]andGitHub c8ec687300 [pip] Bump autopep8 from 2.0.2 to 2.0.4
Bumps [autopep8](https://github.com/hhatto/autopep8) from 2.0.2 to 2.0.4.
- [Release notes](https://github.com/hhatto/autopep8/releases)
- [Commits](https://github.com/hhatto/autopep8/compare/v2.0.2...v2.0.4)

---
updated-dependencies:
- dependency-name: autopep8
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-27 23:08:55 +00:00
Budi UtomoandGitHub 4feb3a1c08 Merge pull request #383 from budtmo/dependabot/pip/master/click-8.1.7
[pip] Bump click from 8.1.6 to 8.1.7
2023-08-18 09:34:06 +02:00
dependabot[bot]andGitHub cb87d43aab [pip] Bump click from 8.1.6 to 8.1.7
Bumps [click](https://github.com/pallets/click) from 8.1.6 to 8.1.7.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/main/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.1.6...8.1.7)

---
updated-dependencies:
- dependency-name: click
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-17 23:56:08 +00:00
Budi UtomoandGitHub d4e7a95a8c Merge pull request #382 from budtmo/dependabot/pip/master/coverage-7.3.0
[pip] Bump coverage from 7.2.7 to 7.3.0
2023-08-14 07:24:42 +02:00
dependabot[bot]andGitHub 72418957d5 [pip] Bump coverage from 7.2.7 to 7.3.0
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.2.7 to 7.3.0.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.2.7...7.3.0)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-08-13 23:46:22 +00:00
budtmo 725138794b Updated documentation about Selenium 4.x integration 2023-08-08 11:25:59 +02:00
budtmo 92a5487df3 Added documentation about Selenium 4.x integration 2023-08-08 11:21:51 +02:00
budtmo 0a026decdc Typo 2023-08-07 15:13:15 +02:00
budtmo 01d12a2263 New release format 2023-08-07 14:20:03 +02:00
budtmo 92a406e3ba Fixed typo 2023-08-04 14:37:34 +02:00
budtmo 56c8deedd2 Updated base image to 2.0.1-p0 2023-08-04 14:33:41 +02:00
budtmo 7a4933c63a Updated base image to 2.0.0-p1 2023-08-04 14:29:53 +02:00
Budi UtomoandGitHub e268a43141 Merge pull request #379 from foureight84/wsl2-nestedVirtualization
[documentation] WSL2 - added instructions to enable hw accelerated kvm via nestedvirtualization flag
2023-08-04 12:44:08 +02:00
Khoa Truong 87bebdf4ea [documentation] added instructions to enable hw accelerated kvm via nestedvirtualization flag 2023-08-03 01:42:06 -07:00
Budi UtomoandGitHub 52642214ed Merge pull request #374 from budtmo/dependabot/pip/master/click-8.1.6
[pip] Bump click from 8.1.5 to 8.1.6
2023-07-19 07:35:54 +02:00
dependabot[bot]andGitHub f0985a3898 [pip] Bump click from 8.1.5 to 8.1.6
Bumps [click](https://github.com/pallets/click) from 8.1.5 to 8.1.6.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/8.1.6/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.1.5...8.1.6)

---
updated-dependencies:
- dependency-name: click
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-18 23:19:20 +00:00
Budi UtomoandGitHub b082c0545f Merge pull request #372 from budtmo/dependabot/pip/master/coverage-7.2.7
[pip] Bump coverage from 7.2.5 to 7.2.7
2023-07-14 12:33:07 +02:00
dependabot[bot]andGitHub 6625803431 [pip] Bump coverage from 7.2.5 to 7.2.7
Bumps [coverage](https://github.com/nedbat/coveragepy) from 7.2.5 to 7.2.7.
- [Release notes](https://github.com/nedbat/coveragepy/releases)
- [Changelog](https://github.com/nedbat/coveragepy/blob/master/CHANGES.rst)
- [Commits](https://github.com/nedbat/coveragepy/compare/7.2.5...7.2.7)

---
updated-dependencies:
- dependency-name: coverage
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-14 10:26:01 +00:00
Budi UtomoandGitHub 6918f1519f Merge pull request #371 from budtmo/dependabot/pip/master/click-8.1.5
[pip] Bump click from 8.1.3 to 8.1.5
2023-07-14 12:25:29 +02:00
Budi UtomoandGitHub 92c655cad2 Merge pull request #370 from budtmo/dependabot/pip/master/mock-5.1.0
[pip] Bump mock from 5.0.2 to 5.1.0
2023-07-14 12:24:52 +02:00
dependabot[bot]andGitHub 9ad0f32d93 [pip] Bump click from 8.1.3 to 8.1.5
Bumps [click](https://github.com/pallets/click) from 8.1.3 to 8.1.5.
- [Release notes](https://github.com/pallets/click/releases)
- [Changelog](https://github.com/pallets/click/blob/8.1.5/CHANGES.rst)
- [Commits](https://github.com/pallets/click/compare/8.1.3...8.1.5)

---
updated-dependencies:
- dependency-name: click
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-14 10:18:02 +00:00
dependabot[bot]andGitHub e77bb73077 [pip] Bump mock from 5.0.2 to 5.1.0
Bumps [mock](https://github.com/testing-cabal/mock) from 5.0.2 to 5.1.0.
- [Changelog](https://github.com/testing-cabal/mock/blob/master/CHANGELOG.rst)
- [Commits](https://github.com/testing-cabal/mock/compare/5.0.2...5.1.0)

---
updated-dependencies:
- dependency-name: mock
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-14 10:17:59 +00:00
budtmo 6e9d4767f6 Added dependabot to update dependencies 2023-07-14 12:17:33 +02:00
budtmo 77f1be5bdd Updated appium base image 2023-07-06 10:26:29 +02:00
budtmo 11279d2595 Updated base image v2.0.b71-p0 2023-06-07 21:30:07 +02:00
Budi UtomoandGitHub b600346ab6 Merge pull request #355 from budtmo/dependabot/pip/cli/requests-2.31.0
Bump requests from 2.30.0 to 2.31.0 in /cli
2023-05-23 17:42:55 +02:00
dependabot[bot]andGitHub f727ee0667 Bump requests from 2.30.0 to 2.31.0 in /cli
Bumps [requests](https://github.com/psf/requests) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/psf/requests/releases)
- [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md)
- [Commits](https://github.com/psf/requests/compare/v2.30.0...v2.31.0)

---
updated-dependencies:
- dependency-name: requests
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-23 07:07:47 +00:00
Budi UtomoandGitHub fe61c99eff Update DOCKER-ANDROID-PRO.md 2023-05-17 23:04:04 +02:00
Budi UtomoandGitHub 2ac43ba4cb Changed order in readme 2023-05-11 14:35:06 +02:00
budtmo 0591667c0b Resized the image 2023-05-11 14:03:58 +02:00
budtmo af1c18856a Added docker-android users 2023-05-11 13:49:44 +02:00
budtmo 28c71e2b65 Added codecov badge 2023-05-11 13:42:19 +02:00
budtmo ea2f387203 Merge branch 'master' of github.com:budtmo/docker-android 2023-05-11 13:02:21 +02:00
budtmo a365368044 Added step to publish test result 2023-05-11 13:02:13 +02:00
Budi UtomoandGitHub 0fe711f563 Typo 2023-05-10 13:44:36 +02:00
budtmo e00e0dd54e Updated base image to version v2.0.b63-p2 2023-05-09 20:31:46 +02:00
budtmo 6bc9081847 Removed codecov badge 2023-05-09 19:43:34 +02:00
budtmo 9ad2a1e73e Removed publishing test result step 2023-05-09 19:41:56 +02:00
budtmo 6767970307 Big restructuring by moving to python 2023-05-09 19:34:44 +02:00
Budi UtomoandGitHub abcdf3f4d1 Merge pull request #329 from yogeshpatel81/patch-1
Updated chrome driver version for Android 12
2023-01-02 16:47:22 +01:00
Budi UtomoandGitHub 69c0bbd120 Merge branch 'master' into patch-1 2023-01-02 11:37:05 +01:00
Budi UtomoandGitHub 1d192c85e0 Merge pull request #323 from LerryAlexander/fix/system-ui-not-responding-issue
Fixing 'System UI not responding'  popup message appearing on newest android versions
2023-01-02 11:35:49 +01:00
Lerry fcb6a21d00 removing function change_emulator_ram_size since it's not necessary anymore 2022-12-23 17:16:33 -08:00
Lerry aedb5f9ce8 merge with master 2022-12-23 17:07:25 -08:00
budtmo d436eb36c1 Removed ATD and cleaned up the code because of ANDROID_HOME 2022-08-19 20:33:19 +02:00
budtmo 3ea820cd99 Using newest base image 1.22.3-p1 2022-08-19 16:31:05 +02:00
yogeshpatel81andGitHub e642adcaad Update release.sh
fixing issue 309 - https://github.com/budtmo/docker-android/issues/309
2022-08-05 15:50:51 -05:00
Budi UtomoandGitHub b49e96cf93 Merge pull request #328 from clouedoc/patch-1
edit default emulator binary
2022-07-13 16:16:25 +02:00
Camille Louédoc-EyrièsandGitHub 9346afc2da edit default emulator binary 2022-06-25 21:40:42 +02:00
Lerry 607f9de6b4 Fixing 'System UI not responding' popup message appearing on newest android versions (indenting code) 2022-05-06 00:45:47 -04:00
Lerry 6be44c92d3 Fixing 'System UI not responding' popup message appearing on newest android versions 2022-05-05 01:11:03 -04:00
budtmo d58eb73294 Using newest base image with Appium 1.22.3 2022-05-02 10:05:39 +02:00
budtmo 2756b7febc Updated base image that contains Appium 1.22.2 2022-04-25 16:03:44 +02:00
budtmo ee5630f893 Updated base image that contains Appium 1.22.1 2022-04-25 15:49:55 +02:00
budtmo a72a5d1edc Using python 3.8.12 on pipeline 2022-04-08 12:45:34 +02:00
budtmo 9f58ad6bda Dropped polyverse support 2022-04-08 12:35:43 +02:00
Budi UtomoandGitHub 94a3f40ac6 Merge pull request #314 from inez/patch-1
(documentation) Added information about SSHing to the virtual machine
2022-02-16 10:42:41 +01:00
Inez KorczyńskiandGitHub e340223c8c Add information about SSHing to the virtual machine 2021-12-22 16:38:23 -08:00
Budi UtomoandGitHub 77488aea7f Merge pull request #310 from JoelWhitney/joel/android-11-x86_64
Android 11 build issue with 32-bit image
2021-11-17 13:59:23 +01:00
Budi UtomoandGitHub 8f1c4bf1ca Merge branch 'master' into joel/android-11-x86_64 2021-11-17 11:45:03 +01:00
Budi UtomoandGitHub cd63313358 Changed polymorphing llink 2021-11-10 15:03:48 +01:00
Joel Whitney d0f9534e3d Android 11 build issue with 32-bit image 2021-11-04 13:02:32 -04:00
budtmo 7b6bc3fe3e Removed support for Android 5.0.1 and 5.1.1 2021-10-05 10:06:46 +02:00
budtmo 1f1d4ccf49 Using the latest appium version 2021-10-05 10:03:43 +02:00
Budi UtomoandGitHub 8278a3f6ef Merge pull request #303 from syntx/patch-1
Update README_CUSTOM_CONFIG.md
2021-10-05 10:01:38 +02:00
syntxandGitHub 92ea480e55 Update README_CUSTOM_CONFIG.md
This seems like a typo in the documentation, according to: https://github.com/budtmo/docker-android/blob/0a8b7c07a2659fe9bd316bac8c21c506f953620a/src/utils.sh#L60-L62
2021-10-04 23:55:29 +03:00
budtmo 0188131350 Replaced operator 2021-08-05 13:28:43 +02:00
budtmo 371a57c663 Added Android 12.0 into pipeline 2021-08-05 12:28:04 +02:00
Budi UtomoandGitHub 6d4de35602 Merge pull request #297 from JoelWhitney/android_12
Support Android 12 (API 31)
2021-08-05 12:24:47 +02:00
Joel Whitney 51158d8630 processor 2021-08-03 18:04:53 -04:00
Joel Whitney 3a7cba3dc9 x86_64 2021-08-03 17:16:21 -04:00
Joel Whitney 4bb9f044ed 12 2021-08-03 16:15:59 -04:00
budtmo 0e35dab27f Updated base image 2021-07-20 17:21:42 +02:00
Budi UtomoandGitHub 14a98aea88 Merge pull request #294 from ireneu/master
Check correctly if device exists
2021-07-20 17:17:57 +02:00
IreandGitHub 337aaf5103 Use regex to verify config 2021-07-09 14:20:52 +02:00
IreandGitHub f5e86d5806 Check correctly if device exists
config.ini has spaces around the equals sign
2021-07-09 10:56:29 +02:00
budtmo caf2cb2cd8 Fixed pip issue on Azure DevOps 2021-06-21 12:15:51 +02:00
budtmo 03f2ea256a Fixed wrong name 2021-06-21 12:10:18 +02:00
budtmo af2d302bbc Formatted 2021-06-21 11:45:36 +02:00
budtmo b6752ea535 Renamed 2021-06-21 11:42:05 +02:00
budtmo 06a8e83922 Updated base image 2021-06-21 11:40:22 +02:00
budtmo a7e7eaa5aa Added release pipelines 2021-06-21 11:39:10 +02:00
budtmo d2c82d05c7 Removed matrix from pipeline 2021-06-21 10:47:09 +02:00
budtmo 79d36e1536 Replaced status badge of Travis with Azure DevOps 2021-06-21 10:36:05 +02:00
budtmo 90ff1782ae Reverted the changes 2021-06-21 10:33:07 +02:00
budtmo 92e4933521 Published test result at the end 2021-06-21 10:25:54 +02:00
budtmo 4f9469db55 Added matrix 2021-06-21 10:24:06 +02:00
budtmo cc409b9914 Formatted 2021-06-21 10:18:02 +02:00
budtmo 4cc5a36c32 Added Azure DevOps 2021-06-21 10:13:15 +02:00
budtmo ed77303a16 Removed travis from the project 2021-06-21 10:11:34 +02:00
budtmo 5696fe3ea0 Deleted unused script 2021-06-21 09:54:57 +02:00
Budi UtomoandGitHub b39a8784b7 Merge pull request #287 from scottwallacesh/master
Fix an issue when attempting to detect an existing AVD image
2021-06-21 09:52:26 +02:00
Scott WallaceandGitHub fcb1f2ec31 Fix an issue when attempting to detect an existing AVD image
Fixes #286.
2021-05-05 10:04:46 +01:00
Budi UtomoandGitHub 49113f2cb4 Added PayPal link for donation 2021-04-28 15:00:12 +02:00
Budi UtomoandGitHub 0a8b7c07a2 Added step how to check kvm 2021-02-16 15:40:39 +01:00
butomo1989 49b9c44f3a Using Appium 1.20.2 2021-02-04 08:31:13 +01:00
butomo1989 15cddf08c4 Merge branch 'master' of github.com:butomo1989/docker-android 2021-02-03 16:55:06 +01:00
butomo1989 71949ee857 Using Appium 1.20.1 2021-02-03 16:54:51 +01:00
Budi UtomoandGitHub d0e3c619ca Merge pull request #277 from iqalab-cloud/bug-fix-incorrect-max-session
Bug fix: maxSession in appium config should be 1
2021-01-13 13:07:30 +01:00
Zhaopeng XUAN 8dc87a3a3c Bug fix: maxSession in appium config should be 1 2021-01-13 12:39:36 +01:00
Budi UtomoandGitHub 76617374c0 Merge pull request #274 from iqalab-cloud/feature-support-selenium-proxy-class
Feature: Support customised Selenium Proxy Class when use Appium
2021-01-09 11:21:30 +01:00
Zhaopeng XUAN 70fc3b411c Fix the issue 2021-01-08 12:05:34 +01:00
Zhaopeng XUAN 5e7ce8ce66 Feature: Support Selenium Proxy Class when use Appium 2021-01-08 11:44:56 +01:00
butomo1989 1d7121c41b Merge branch 'master' of github.com:butomo1989/docker-android 2021-01-08 08:34:25 +01:00
butomo1989 0a1758091f Updated base image 2021-01-08 08:34:06 +01:00
Budi UtomoandGitHub eb045aa644 Merge pull request #270 from jnvillar/patch-1
Update README_VMWARE.md
2021-01-07 10:42:00 +01:00
Juan Ignacio Noli VillarandGitHub e5a9fe7031 Update README_VMWARE.md 2020-12-17 10:49:08 -03:00
butomo1989 fdb464781a Added monitoring section 2020-09-02 11:33:07 +02:00
Budi UtomoandGitHub 2e5237ec80 Merge pull request #260 from yintro4ha/master
Able to add proxy user and password on Android emulator
2020-08-27 12:56:15 +02:00
yintro4haandGitHub b1f9ec5e79 Merge pull request #1 from yintro4ha/add-proxy-auth
Update utils.sh
2020-08-24 15:14:00 +08:00
yintro4haandGitHub 1ac4a6484e Update README_CUSTOM_CONFIG.md
Add document for new proxy auth variable
2020-08-24 15:10:03 +08:00
yintro4haandGitHub f09e38c92c Update utils.sh
Add Variable: 
1. HTTP_PROXY_USER
2. HTTP_PROXY_PASSWORD
2020-08-24 15:05:22 +08:00
butomo1989 e051faf84a Updated the base image 2020-07-31 10:51:08 +02:00
butomo1989 2461a6e832 Restart mobile data for specific version 2020-07-23 17:26:36 +02:00
butomo1989 20120f5c0a Added stargazers 2020-07-22 09:12:27 +02:00
butomo1989 6a0f135247 Typo 2020-07-17 14:59:21 +02:00
butomo1989 b36847817d Enable Animation 2020-07-17 14:58:17 +02:00
butomo1989 0196d23103 Switched the order because of bug on Android 10 or higher 2020-07-17 14:57:20 +02:00
butomo1989 01d1c663c1 Updated documentation 2020-07-14 09:54:31 +02:00
butomo1989 5b8ef77bba Updated link 2020-07-14 09:53:05 +02:00
butomo1989 3b3746fff3 Updated security link 2020-07-14 09:52:38 +02:00
butomo1989 d9ba33c9fa Renamed 2020-07-14 09:50:31 +02:00
butomo1989 94132acf41 Updated user statistics 2020-07-14 09:47:13 +02:00
butomo1989 86e7e0f8e5 Updated ga lines 2020-07-13 14:59:51 +02:00
butomo1989 77a1216730 Added docker-android users statistics 2020-07-13 14:20:51 +02:00
butomo1989 56e01002da Added Android 11.0 into travis configuration 2020-07-13 14:10:42 +02:00
butomo1989 287378162f Updated base image 2020-07-13 13:04:49 +02:00
butomo1989 8affae0fa1 Added Android 11.0 2020-07-13 13:03:58 +02:00
Budi UtomoandGitHub ca28b7ad10 Merge pull request #253 from analogue/update_readme_no_google_play
Update README to call out that google play store not installed
2020-07-12 18:54:47 +02:00
Budi UtomoandGitHub edebdfd380 Merge branch 'master' into update_readme_no_google_play 2020-07-12 18:46:08 +02:00
Budi UtomoandGitHub ddf0a451c9 Merge pull request #252 from analogue/fix_crashing_when_run_by_default_as_root_user
Workaround for "Running as root without --no-sandbox is not supported"
2020-07-12 18:45:40 +02:00
analogue fcc439b938 Update README to call out that play store not installed 2020-07-12 10:55:39 -05:00
analogue 68ac0c42ce Workaround crashing when run by default as root user 2020-07-12 09:56:22 -05:00
butomo1989 666d3eaee6 [Fixed issue in codacy] Using correct operator 2020-07-02 14:24:52 +02:00
butomo1989 ecfaf236b9 [Fixed issue in codacy] Added semi-colon 2020-07-02 14:24:18 +02:00
butomo1989 a5714c805d Fixed quote 2020-07-02 14:19:51 +02:00
butomo1989 9eb4b3c595 Fixed link 2020-07-02 14:18:17 +02:00
butomo1989 0389f64365 Removed duplicated note 2020-07-02 14:17:30 +02:00
butomo1989 ba476eb993 Merge branch 'master' of github.com:butomo1989/docker-android 2020-07-02 14:16:18 +02:00
butomo1989 9b2bc985e0 Added sample config of nginx 2020-07-02 14:16:02 +02:00
Budi UtomoandGitHub 1a9b9361e6 Merge pull request #248 from p0vidl0/master
Add selenium session timeout configuration via environment variable
2020-07-02 09:16:28 +02:00
Budi UtomoandGitHub abdb45ea0b Merge branch 'master' into master 2020-07-01 11:19:06 +02:00
butomo1989 b9d6237eb4 Added example to pass password through url 2020-07-01 11:06:05 +02:00
butomo1989 5936037a56 Removed unused lines 2020-06-26 16:02:58 +02:00
butomo1989 0460a62956 Added example of using nginx 2020-06-26 16:01:12 +02:00
Aleksandr Kalashnikov 6403ff78be Add selenium session timeout configuration via environment variable 2020-06-26 10:17:08 +06:00
butomo1989 7ad2eb45c8 Able to have pass in vnc 2020-06-18 16:08:48 +02:00
butomo1989 ea5661fa41 Added note 2020-06-17 17:14:57 +02:00
butomo1989 f323d29aa4 Fixed build issue for API 28 2020-06-17 17:14:50 +02:00
butomo1989 eec0c5df02 Fixed build issue for API 28 2020-06-17 12:21:36 +02:00
butomo1989 b66c5d122a Disabled apklinker 2020-05-08 15:03:47 +02:00
butomo1989 8289bc166f Using Appium 1.17.1 2020-05-08 14:18:14 +02:00
butomo1989 d1e9f7472b Added sponsor link 2020-04-25 09:08:24 +02:00
butomo1989 a22152fd4d Using Appium 1.17.0 2020-04-15 13:13:09 +02:00
butomo1989 83dcca4b8c Removed source 1810 2020-04-15 12:43:41 +02:00
Budi UtomoandGitHub a38691b5e2 Merge pull request #229 from Seabath/master
Add optional env to set avd name
2020-04-15 08:38:25 +02:00
butomo1989 ad696f84bf Merge branch 'master' of github.com:butomo1989/docker-android 2020-04-09 08:52:21 +02:00
butomo1989 b4d8241422 Using Appium 1.16.0 2020-04-09 08:52:11 +02:00
sfontanel feab383008 Add optional env to set avd name 2020-03-09 17:11:36 +01:00
Budi UtomoandGitHub d097c08789 Merge pull request #225 from ihorvitruk/patch-1
Update README.md
2020-01-24 09:06:21 +01:00
Ihor VitrukandGitHub f5978bab45 Update README.md 2020-01-17 23:30:19 +02:00
Budi UtomoandGitHub 6e953ab74b Merge pull request #214 from indranil32/patch-1
Updating README for issue #200
2020-01-07 10:07:48 +01:00
IndranilandGitHub 9794270552 Updating README for issue #200
Updating the google android sample project repo

https://github.com/budtmo/docker-android/issues/200
2019-11-28 00:31:05 +05:30
MashumaroandBudi Utomo ba5f76116b add optional option for device name in json file and use random name instead (Genymotion) 2019-11-20 15:29:41 +01:00
Andrzej ZabostandBudi Utomo e56975ec49 Add data partition size variable documentation (#211) 2019-11-20 15:28:09 +01:00
Budi UtomoandGitHub 2fa8734ac5 Updated GitHub-id 2019-11-03 15:17:18 +01:00
butomo1989 8337e63a53 Update base image 2019-10-22 08:12:48 +02:00
butomo1989 ee9c3e3635 Added Android 10 2019-09-17 14:51:02 +02:00
butomo1989 d8ac737d00 Disabled auto restart 2019-09-16 11:56:48 +02:00
butomo1989 d6a582ae20 Using the newest base image 2019-09-16 10:58:42 +02:00
ArneandBudi Utomo 120d80f0ab Using scrcpy instead of asm (#188) 2019-09-06 14:11:06 +02:00
Budi UtomoandGitHub 377cb04ca1 Merge pull request #189 from Arne-B/real-device-appium-xterm
Running Appium in xterm window
2019-08-20 11:51:35 +02:00
ArneandGitHub a1f83daf10 Running appium in xterm window
This provides the same behaviour as on the emulator containers
2019-08-14 12:28:04 +02:00
Budi UtomoandGitHub c27ab1d6d6 Merge pull request #186 from vvbogdanov87/genymotion-subnetid
Add subnet_id parameter [Genymotion on AWS]
2019-08-12 14:12:20 +02:00
vvbogdanov87 ca0f85b48f Update genymotion documentation 2019-08-09 13:47:57 -07:00
vvbogdanov87 b1114d9b87 Add subnet_id parameter 2019-08-08 14:49:37 -07:00
butomo1989 f5e273d05c Updated readme file 2019-07-26 16:56:21 +02:00
butomo1989 65c139e7d2 Added more Samsung devices and its skin 2019-07-26 16:55:12 +02:00
Budi UtomoandGitHub 34fa736916 Merge pull request #179 from rbaron/master
Fixed issue #170
2019-07-25 12:57:01 +02:00
Budi UtomoandGitHub b707d1971f Merge branch 'master' into master 2019-07-25 12:51:27 +02:00
butomo1989 5923820261 Merge branch 'master' of github.com:butomo1989/docker-android 2019-07-25 12:19:44 +02:00
butomo1989 d9389a48c6 Removed unused lines 2019-07-25 12:19:28 +02:00
Budi UtomoandGitHub 611a93d926 Merge pull request #181 from GraemeF/patch-1
Fixed typo
2019-07-24 12:03:05 +02:00
Graeme FosterandGitHub 4d64ece2f9 Fixed typo 2019-07-23 14:17:52 +00:00
Raphael Baron d1126b58c2 Fixes AVD unit tests 2019-07-20 12:35:44 +00:00
Raphael Baron d881cb2e06 Renames tests 2019-07-20 12:34:02 +00:00
Raphael Baron 9f0c6a595e Fixes app unit tests 2019-07-20 12:31:59 +00:00
Raphael Baron 8c09a3e169 Fixes documentation for persisting device config 2019-07-20 09:45:14 +00:00
Raphael Baron 0e1ffe9cff Uses android_emulator/config.ini instead of .android/devices.xml to assess if device has been previously initialized 2019-07-20 09:43:59 +00:00
butomo1989 9adec7fcfd Fixed missing path 2019-07-10 16:10:05 +02:00
butomo1989 4de36e6568 Added Docker-Android logo as Background for other images and cleaned up 2019-07-10 16:07:20 +02:00
Budi UtomoandGitHub c299582ac4 Merge pull request #173 from trinhpham/master
Added Docker-Android logo as Background
2019-07-10 15:59:57 +02:00
Trinh Pham 69654cd036 Set screen background on startup 2019-07-10 18:30:59 +07:00
Trinh Pham 81f110adea Set screen background on startup 2019-07-10 18:30:46 +07:00
Trinh Pham 068bb87ab3 Merge branch 'master' of https://github.com/budtmo/docker-android
# Conflicts:
#	docker/Emulator_x86
#	docker/configs/sources1810.list
#	docker/configs/x11vnc.pref
#	docker/sources1810.list
#	docker/x11vnc.pref
#	src/sources1810.list
#	src/x11vnc.pref
2019-07-10 18:28:53 +07:00
Trinh Pham d1559b6748 Set screen background on startup 2019-07-10 18:20:46 +07:00
Trinh Pham 5c3cc8ed4d Add screen background 2019-07-10 16:14:27 +07:00
Trinh Pham 2ba73f87e0 Organize config files 2019-07-10 15:59:18 +07:00
butomo1989 d789139be9 Added ATD 2019-07-10 10:13:26 +02:00
butomo1989 b162e2ee58 Fixed typo 2019-07-10 09:35:34 +02:00
butomo1989 42b4775e9f Updated the base image 2019-07-10 09:35:17 +02:00
Trinh Pham 4213882f04 Add screen background 2019-07-10 14:30:48 +07:00
butomo1989 1b6bdab388 Used the same implementation of Docker-Image from Emulator_x86 2019-07-09 14:13:52 +02:00
Budi UtomoandGitHub 087c91922c Merge pull request #171 from trinhpham/master
Activate only one view of Desktop
2019-07-09 13:54:42 +02:00
Trinh Pham 168f51471c Single virtual desktop 2019-07-09 18:10:58 +07:00
butomo1989 19e26a086b Enabled proxy on Android emulator 2019-07-05 09:37:19 +02:00
butomo1989 de073327af Addded different templates for issues 2019-07-03 10:54:05 +02:00
Budi UtomoandGitHub e7d684eb0a Updated readme.md 2019-07-03 10:36:08 +02:00
butomo1989 6237f452f8 Added hyperlink 2019-07-02 13:57:10 +02:00
Budi UtomoandGitHub cd2a7a5bcd Merge pull request #168 from trinhpham/master
Fixed vnc issue while clicking/dragging mouse and reduced image size
2019-07-02 11:27:40 +02:00
Trinh Pham 92acd04a53 Move Polyverse to top to reduce the image size 2019-06-28 15:09:36 +07:00
Trinh Pham 7afe1c0e54 Default value for DOCKER_ORG 2019-06-28 13:56:04 +07:00
Trinh Pham 455bf6023d Fix wrong path 2019-06-28 13:52:00 +07:00
Trinh Pham ce9936b6df Update x11vnc to prevent crash
- Fix PATH
2019-06-28 11:46:02 +07:00
Trinh Pham 359551e272 Update x11vnc to prevent crash 2019-06-28 11:34:30 +07:00
Trinh Pham c888c05572 Auto restart x11vnc if crashes
Related bug: https://bugs.launchpad.net/ubuntu/+source/x11vnc/+bug/1686084
2019-06-16 23:45:37 +07:00
butomo1989 3479738457 Updated readme 2019-06-13 22:47:51 +07:00
butomo1989 98a3b3d8d5 Using beta version 2019-06-13 17:24:37 +07:00
butomo1989 abf1d33e62 Deleted unused file 2019-06-07 14:33:33 +07:00
butomo1989 9e826e4f61 Replaced gmtool with gmsaas 2019-06-07 14:28:48 +07:00
butomo1989 5c2045a840 Replaced gmtool with gmsaas on installation process 2019-06-06 00:59:35 +07:00
butomo1989 aa7e88cf46 Use gpu swiftshader_indirect and VM acceleration by default 2019-05-29 21:56:19 +07:00
butomo1989 4ac0bebe99 Added Polyverse for security 2019-05-06 18:33:13 +07:00
butomo1989 ac9b6e9af7 Updated the base image 2019-05-06 18:26:16 +07:00
Budi UtomoandGitHub 65afbdeeba Merge pull request #156 from polyverse/master
Added Polymorphic
2019-05-04 09:05:43 +02:00
butomo1989 ed29b14c9e Updated the docker base image 2019-04-04 20:02:26 +07:00
Budi UtomoandGitHub 54cb0fc824 Replaced the old link 2019-03-18 10:31:20 +01:00
Budi UtomoandGitHub 15375cc53b Added README.md 2019-03-11 20:13:51 +01:00
budtmo 4516899786 Added credits in readme 2019-03-11 17:10:02 +01:00
budtmo 45e7df6db3 Added Samsung S7 and S7 Edge 2019-03-11 16:53:37 +01:00
Budi UtomoandGitHub b9a7a486e1 Renamed 2019-03-06 19:33:27 +01:00
Budi UtomoandGitHub 90642436dd Renamed 2019-03-06 17:19:02 +01:00
budtmo ef3c4e28c0 Added readme file for Jenkins 2019-03-06 15:57:45 +01:00
budtmo 4d4c22124f Added SaltStack 2019-03-01 12:46:50 +01:00
budtmo 7d63eac5ae Updated Genymotion to version 3.0.1 2019-03-01 11:14:38 +01:00
Chris Hanaoka b1be8ceeab added polymorphic linux install 2019-02-26 18:34:23 -08:00
budtmo fcb89f2702 Updated maintainer email 2019-02-21 18:01:38 +01:00
budtmo 226e088390 Updated Appium server to version 1.11.1 2019-02-21 17:57:20 +01:00
budtmo 3574b9825b Merge branch 'master' of github.com:budtmo/docker-android 2019-02-19 10:26:23 +01:00
budtmo d34d635114 Using Appium 1.11.0 2019-02-19 10:26:09 +01:00
Budi UtomoandGitHub 43d38adf76 Updated readme 2019-02-14 13:20:11 +01:00
Budi UtomoandGitHub a2d3c05a1c Merge pull request #145 from fossabot/master
Add license scan report and status
2019-02-12 15:53:56 +01:00
Budi UtomoandGitHub a4c7919209 Merge branch 'master' into master 2019-02-12 15:31:20 +01:00
Budi UtomoandGitHub 2e59c45142 Added PR badge 2019-02-11 10:42:37 +01:00
fossabot 664ad07905 Add license scan report and status
Signed-off-by: fossabot <badges@fossa.io>
2019-02-07 00:55:06 -08:00
Budi UtomoandGitHub 4b7de9d645 Merge pull request #143 from nonVoid/master
change timeout in generated nodeconfig.js from 30000 to 30 [because of Selenium 3.x]
2019-01-31 16:19:57 +01:00
nonVoidandGitHub 5d1cf8e671 Merge branch 'master' into master 2019-01-31 15:41:09 +01:00
Felix Weber 9441d537b7 change timeout in generated nodeconfig.js from 30000 to 30 2019-01-31 15:32:51 +01:00
Budi UtomoandGitHub a40acea0ba Merge pull request #142 from nonVoid/master
Fixed #135
2019-01-31 14:32:29 +01:00
Felix Weber 54811c0c81 change SCREEN_DEPTH to 24+32 in noVNC(xvfb) settings 2019-01-31 14:11:01 +01:00
budtmo 893abf99e4 Added release badge 2019-01-31 10:40:19 +01:00
budtmo 14b6091277 Deleted old video 2019-01-30 15:01:28 +01:00
budtmo 5acbce6654 Renamed 2019-01-30 14:58:31 +01:00
butomo1989 1c844033f6 Merge branch 'master' of github.com:butomo1989/docker-android 2019-01-16 10:49:17 +01:00
butomo1989 83ba9bb79e Using Appium 1.10.1 2019-01-16 10:49:05 +01:00
Budi UtomoandGitHub 712d3485ad Merge pull request #139 from nichotined/master
Added documentation how to connect emulator to the host
2019-01-16 09:36:35 +01:00
Nicholas FrederickandGitHub 04512a0d16 Update README.md
Added Control Android connected to host (Emulator or Real Device)
2019-01-15 22:30:58 +07:00
butomo1989 cf0ebd7eb9 Fixed #138 2019-01-15 10:19:42 +01:00
butomo1989 32cb68f6c9 Updated base image 2019-01-08 10:48:11 +01:00
Budi UtomoandGitHub 98b0b3a140 Merge pull request #134 from tadashi0713/add_unittest_relaxed_security
Add unittest to run appium with relaxed security
2019-01-07 09:20:58 +01:00
Tadashi NemotoandGitHub 2c9c421c35 Merge branch 'master' into add_unittest_relaxed_security 2019-01-05 15:59:12 +09:00
tadashi0713 afea49a2c8 Add unittest to run appium with relaxed security 2019-01-05 15:56:24 +09:00
butomo1989 442a10afd2 Fixed wrong file 2019-01-02 13:32:09 +01:00
butomo1989 478e0d0e51 Added blog about integration between Genymotion and DockerAndroid 2019-01-02 13:29:40 +01:00
butomo1989 17d09eb835 Renamed 2018-11-29 09:16:30 +01:00
butomo1989 09c3fbe765 Edited wrong port 2018-11-29 09:09:07 +01:00
butomo1989 b285d8a1da Renamed type for consistency in article 2018-11-29 09:07:26 +01:00
Budi UtomoandGitHub 46d3a4f8c1 Removed because the content of it is old 2018-11-22 16:39:23 +01:00
butomo1989 033be6d7c4 Keep ssh sessions alive 2018-11-22 12:17:17 +01:00
butomo1989 84ed95aac1 Merge branch 'master' of github.com:butomo1989/docker-android 2018-11-19 13:01:28 +01:00
butomo1989 c298cc7ae1 Enabled of using existing security group 2018-11-19 13:01:18 +01:00
Budi UtomoandGitHub 0ab0eaffcf Typo 2018-11-19 10:53:53 +01:00
butomo1989 0e00cffe4d Corrected the example of json file for Genymotion on AWS 2018-11-15 15:02:29 +01:00
butomo1989 3dc73b4573 Enabled custom security group 2018-11-14 13:56:41 +01:00
Budi UtomoandGitHub 711cbfef72 Updated lines 2018-11-09 15:58:36 +01:00
butomo1989 67a0935fc5 Using custom_ami doesnt need android_version 2018-11-08 12:54:20 +01:00
butomo1989 55012f9ac0 Enable custom AMI which given from the user 2018-11-07 16:29:14 +01:00
butomo1989 2e379769e9 Added engress for AWS deployment for Genymotion 2018-11-05 14:49:59 +01:00
butomo1989 2ffb3a0c3d Added Android version for Google Analytics 2018-11-05 14:28:36 +01:00
butomo1989 e49d2a58cb Enabled GA 2018-10-26 15:54:04 +02:00
butomo1989 099afef2a1 Added header 2018-10-26 15:18:27 +02:00
butomo1989 67a4468b05 Modified file type 2018-10-26 15:05:14 +02:00
butomo1989 21306b5b08 Linked license in README 2018-10-26 15:03:44 +02:00
butomo1989 500fff9da4 Added google analytics and automation script for Genymotion 2018-10-26 15:00:46 +02:00
butomo1989 68db6315d4 Enabled Android 9.0 2018-10-23 16:22:03 +02:00
butomo1989 2ad579c77b Added Android 9.0 2018-10-23 16:17:12 +02:00
Budi UtomoandGitHub bc5cb96ca9 Merge pull request #124 from stazdx/aks-terraform
Custom charts added for deployment on Azure
2018-10-15 12:50:40 +02:00
Staz Dx 85b2312b7f Kompose/volumes.yaml deleted 2018-10-12 18:17:12 -05:00
Staz Dx b518b38c35 Custom chart for running in AKS (recommended) 2018-10-12 18:15:21 -05:00
Staz Dx 1ebdbc7873 Custom chart for running in AKS (recommended) 2018-10-12 18:14:26 -05:00
Budi UtomoandGitHub b3c8cb3cce Merge pull request #123 from stazdx/aks-terraform
Running it in (Azure Kubernetes Service) AKS by using Terraform, Azure CLI, Kompose & Kubectl
2018-10-11 08:18:00 +02:00
Staz Dx 05aa522965 Running in AKS using Terraform, Azure CLI, Kompose & Kubectl 2018-10-10 18:27:18 -05:00
Budi UtomoandGitHub 2a48fc6f71 Merge pull request #122 from kjlubick/patch-1
Added steps for deploying on GCE
2018-10-06 15:19:37 +02:00
Kevin LubickandGitHub fd4a5a0763 Add a bit more verbosity 2018-10-05 14:47:17 -04:00
Kevin LubickandGitHub 7c085db7a3 Add Cloud instructions for GCE 2018-10-05 11:12:55 -04:00
butomo1989 e5817ebe7d Formatted 2018-09-27 15:13:46 +02:00
butomo1989 2ed92c97e1 Added sample of docker terraform 2018-09-27 15:12:03 +02:00
butomo1989 156fc288c7 Using the latest base image 2018-09-27 09:48:27 +02:00
butomo1989 c790d05e19 Using the needed rules in security group 2018-09-26 17:38:28 +02:00
butomo1989 78b9b79212 Renamed the tag 2018-09-21 13:57:31 +02:00
Budi UtomoandGitHub 57ae8a1f16 Merge pull request #119 from lilinor/contribution
update genymotion readme file
2018-09-17 18:16:28 +02:00
butomo1989 fc90713016 Fixed broken link 2018-09-14 16:19:46 +02:00
butomo1989 948b5cc07b Merge branch 'master' of github.com:butomo1989/docker-android 2018-09-14 15:37:10 +02:00
butomo1989 dfc86227e0 Added instruction to use camera 2018-09-14 15:37:00 +02:00
Budi UtomoandGitHub dfa70768ab Merge pull request #118 from tadashi0713/add-aws-intro
Added AWS instruction
2018-09-14 10:27:26 +02:00
Tadashi NemotoandGitHub a34a7e8339 Add AWS Instruction
Instruction to use EC2 Bare Metal Instance
2018-09-14 12:37:03 +09:00
lilinor e9726a86af update genymotion readme file 2018-09-13 17:46:14 +02:00
butomo1989 4e5370b85b Cleaned up 2018-09-04 12:01:47 +02:00
butomo1989 da177442ce Cleaned up 2018-09-04 10:34:49 +02:00
butomo1989 e2800863e8 Deleted old badge 2018-09-03 12:05:23 +02:00
butomo1989 c4bd3dcf55 Updated version of Selenium Grid in examples 2018-09-03 10:28:58 +02:00
butomo1989 ac594d96e9 Updated base image 2018-09-03 10:04:48 +02:00
butomo1989 a49cc2950e Cleaned up 2018-08-30 13:46:14 +02:00
butomo1989 6b657dd13e Replaced the hard code 2018-08-30 13:36:53 +02:00
butomo1989 aa7a798f62 Connect to Genymotion emulator automatically 2018-08-30 13:35:03 +02:00
butomo1989 ccec2c5969 Using specific version of appium as base image because a release issue with it 2018-08-30 12:05:49 +02:00
butomo1989 e45bc0010f Enabled adb remotely 2018-08-29 13:02:44 +02:00
butomo1989 efd1f07e58 Fixed escape char 2018-08-27 14:32:33 +02:00
butomo1989 73418a8b4f Fixed escape char 2018-08-27 14:30:51 +02:00
Budi UtomoandGitHub ad444fd738 Merge pull request #116 from bonigarcia/master
Fix chromedriver version for Android 5.0.1
2018-08-27 09:48:28 +02:00
Boni Garcia 12391277e6 Fix chromedriver version for Android 5.0.1 2018-08-27 09:31:06 +02:00
Budi UtomoandGitHub c50f185c65 Merge pull request #115 from stazdx/master
Added documentation about Azure
2018-08-27 09:11:18 +02:00
stazdxandGitHub 62090f73b4 Merge pull request #1 from stazdx/azure-docs
Enable nested virtualization on Azure
2018-08-24 17:49:41 -05:00
stazdxandGitHub 7bce737447 Enable nested virtualization on Azure 2018-08-24 17:49:10 -05:00
butomo1989 f2c6ab79bb Enabled key pair 2018-08-24 16:14:04 +02:00
butomo1989 afcbd4a7e7 Merge branch 'master' into release-1.4 2018-08-21 16:45:54 +02:00
Budi UtomoandGitHub 9a714e5fb3 Merge pull request #111 from devilankur18/custom_args
Able to pass custom arguments to Emulator
2018-08-21 16:23:22 +02:00
Ankur Agarwal a6394bcf74 added support for custom arguments while running/creating emulator 2018-08-21 17:50:50 +05:30
butomo1989 43d0bb1292 Merge branch 'release-1.4' of github.com:butomo1989/docker-android into release-1.4 2018-08-21 09:49:41 +02:00
butomo1989 e56352bf74 Added provider id 2018-08-21 09:49:10 +02:00
Budi UtomoandGitHub 7746b0ce1a Merge pull request #112 from red-avtovo/appium_latest
Appium latest image
2018-08-21 08:55:25 +02:00
Aleksandr Bochev 806443e956 switched to base image latest appium 2018-08-20 17:38:53 +02:00
butomo1989 a5d0e6eba2 Always use the latest AMI image 2018-08-20 11:46:09 +02:00
butomo1989 ac9371a2ed Merge branch 'master' into release-1.4 2018-08-20 09:51:35 +02:00
Budi UtomoandGitHub f3abb0a828 Merge pull request #110 from devilankur18/emulator_backup_restore
AVD initialisation based on devices xml file
2018-08-16 18:04:20 +02:00
Ankur Agarwal c653efc7b1 fixes related to initialization 2018-08-16 12:36:51 +00:00
butomo1989 bcd7d9a29b Back to user mode 2018-08-14 09:14:25 +02:00
butomo1989 dd7ef41590 Added integration with Genymotion in AWS 2018-08-11 19:38:47 +02:00
butomo1989 d7c9730712 Fixed issue #90 2018-08-03 15:58:07 +02:00
butomo1989 735bc64a2d Cleaned up 2018-08-03 15:56:36 +02:00
butomo1989 307d6502af Fixed string 2018-08-02 12:52:31 +02:00
butomo1989 91a4e270c6 Refactored code 2018-08-02 11:42:19 +02:00
Budi UtomoandGitHub d13e60a122 Merge pull request #104 from devilankur18/master
Added device_id support via ENV variable or auto uuid values
2018-07-31 09:04:58 +02:00
Ankur AgarwalandGitHub c4be3a1ac0 Merge branch 'master' into master 2018-07-31 01:24:15 +05:30
Ankur AgarwalandGitHub 7c7eed4a3d Fixing trailing whitespaces 2018-07-31 01:17:01 +05:30
Budi UtomoandGitHub d0271e0be0 Merge pull request #103 from mehrdad-abdoli/master
Update Google Play Store app
2018-07-30 17:00:42 +02:00
App-Test 9d71ecded7 Update Google Play Services and some other useful stuff by adb 2018-07-30 16:30:19 +04:30
App-Test 81af88e7a4 Update Google Play Services and some other useful stuff by adb 2018-07-30 16:28:41 +04:30
App-Test a8f7fd2d02 Update Google Play Services and some other useful stuff by adb 2018-07-30 16:26:57 +04:30
App-Test de71e5156c Update Google Play Services and some other useful stuff by adb 2018-07-30 16:19:05 +04:30
Ankur AgarwalandGitHub bcf27f0489 Added logging 2018-07-28 23:20:06 +05:30
Ankur AgarwalandGitHub 972445a8bc Assign device_id via environment variable 2018-07-28 23:07:03 +05:30
App-Test 460e0b8daf Update Google Play Services and some other useful stuff by adb 2018-07-28 16:53:26 +04:30
Budi UtomoandGitHub 3673d195ea Updated Readme 2018-07-25 12:27:09 +02:00
Budi UtomoandGitHub 77c6ac8507 Updated Readme 2018-07-25 12:24:34 +02:00
Budi UtomoandGitHub cd35f4a3ab Merge pull request #100 from bonigarcia/master
Download proper version of chromedriver for each Android version
2018-07-25 12:20:11 +02:00
Boni Garcia 217df7cd65 Include browser name, browser version, and chromedriver version in Docker images table 2018-07-25 11:44:21 +02:00
Boni Garcia ccfdef4fe8 Set default chromedriver version 2018-07-24 17:18:41 +02:00
Boni Garcia b40ec48136 Download proper version of chromedriver 2018-07-24 15:59:11 +02:00
Budi UtomoandGitHub 064331de0e Merge pull request #97 from shadow1163/issue87
Once container start, add flag -wipe-data to command.
2018-07-20 08:01:40 +02:00
Budi UtomoandGitHub 5ef52ca622 Merge branch 'master' into issue87 2018-07-20 07:57:23 +02:00
junbo 15c51a4ab1 roll back is_initialized 2018-07-20 09:53:46 +08:00
Budi UtomoandGitHub 7e2b364c08 Merge pull request #96 from JoeSSS/patch-2
Add information about connecting to adb from outside the container in README
2018-07-19 13:02:04 +02:00
Serghei MoretandGitHub 0b18e4995c Update README.md 2018-07-19 12:41:04 +02:00
Serghei MoretandGitHub f0fb5ef009 Update README.md 2018-07-19 12:39:16 +02:00
Serghei MoretandGitHub ec0c381fb6 Update README.md 2018-07-19 12:38:24 +02:00
Serghei MoretandGitHub 58f7693024 Add adbkey part to README 2018-07-19 12:35:28 +02:00
junbo 40f6e67d83 fix issue 87 2018-07-19 18:11:59 +08:00
Budi UtomoandGitHub 852daa4e32 Merge pull request #92 from red-avtovo/mymaster
Initialise emulator just once
2018-07-10 19:10:49 +02:00
Aleksandr Bochev bf65a73eb1 removed time dependency 2018-07-10 18:45:29 +02:00
Aleksandr Bochev 3577d7e0a1 fixed emulator is unauthorized
performed avd creation just once
2018-07-10 18:34:53 +02:00
Budi UtomoandGitHub 1371744b36 Merge pull request #89 from JoeSSS/patch-1
Fix issue #86
2018-07-09 21:20:51 +02:00
Serghei MoretandGitHub cf3b1cf683 Fix adb getting into the loop 2018-07-09 18:06:58 +02:00
Budi UtomoandGitHub 416a88143f Updated README.md 2018-07-06 10:33:17 +02:00
butomo1989 55719bb638 Use Chrome driver version for Chrome that is inside Emulator 2018-07-05 22:40:41 +02:00
butomo1989 c22fe34e7c Updated README.md 2018-07-05 21:21:24 +02:00
butomo1989 69154410f2 Updated 2018-07-05 21:11:21 +02:00
butomo1989 4975ebcc47 Cleaned up 2018-07-05 21:06:00 +02:00
butomo1989 e4180a6e65 Passed chrome driver version through environment variable 2018-07-05 20:10:47 +02:00
butomo1989 e22b8f141e Removed arm image 2018-07-05 20:04:25 +02:00
butomo1989 7d29525b48 Build version 8.0 and 8.1 2018-07-05 19:56:14 +02:00
butomo1989 f47cc495b0 Merge branch 'release-1.1' of github.com:butomo1989/docker-android into release-1.1 2018-07-05 19:51:46 +02:00
butomo1989 bc516d5a8e Updated permission 2018-07-05 19:11:14 +02:00
Budi UtomoandGitHub b54fcd2087 Merge pull request #72 from greenerchen/patch-2
Build docker images with play store
2018-07-05 17:50:00 +02:00
Greener ChenandGitHub 7e7d12e4e8 Merge branch 'release-1.1' into patch-2 2018-07-05 23:34:22 +08:00
Budi UtomoandGitHub 8d9fc61158 Merge pull request #83 from bonigarcia/master
Use latest version of chromedriver
2018-07-05 17:01:19 +02:00
Budi UtomoandGitHub bc5635ed0a Merge pull request #81 from JoeSSS/JoeSSS-patch-1
Support for Android 8.0 and 8.1
2018-07-05 15:32:59 +02:00
Serghei MoretandGitHub 0b7ca97939 Merge branch 'release-1.1' into JoeSSS-patch-1 2018-07-05 15:28:54 +02:00
Budi UtomoandGitHub 7e0a2e4770 Merge pull request #85 from red-avtovo/sdk_installation_cleanup
cleaned sdk installation
2018-07-05 15:25:35 +02:00
Serghei Moret c82443e221 Update release.sh 2018-07-05 14:29:54 +02:00
Boni Garcia 1d7b7c2ac7 Improve script to download latest version of chromedriver automatically 2018-07-05 12:56:10 +02:00
Aleksandr Bochev 59f792f7c0 cleaned sdk installation 2018-07-05 12:23:13 +02:00
Boni Garcia 84ac59f66a Update chromedriver version to 2.40 2018-07-05 11:41:09 +02:00
Serghei MoretandGitHub d176e69cc1 Let default emulator pick the right kernel 2018-07-03 20:46:23 +02:00
Serghei MoretandGitHub 59f61e057e Update Emulator_x86 2018-07-03 20:44:13 +02:00
butomo1989 601d58c51f Changed apk path 2018-06-28 01:03:27 +02:00
butomo1989 ac33a1f687 Changed apk path 2018-06-28 00:47:49 +02:00
butomo1989 91ebdbf5ab Edited permission 2018-06-28 00:43:26 +02:00
butomo1989 c8fb92e400 Using adb version inside container 2018-06-26 22:53:34 +02:00
butomo1989 80a64e82dd Added demo how to use Genymotion cloud 2018-06-25 23:53:06 +02:00
butomo1989 780278b519 Edited README.md 2018-06-25 22:56:05 +02:00
butomo1989 b4544ae90f Cleaned up Dockerfile 2018-06-25 22:54:01 +02:00
butomo1989 0af1143e72 Deleted genymotion manual installation 2018-06-25 22:48:30 +02:00
butomo1989 48eb6bf9ae Edited README.md 2018-06-22 02:34:29 +02:00
butomo1989 f8940c79f5 Cleaned up 2018-06-22 02:32:01 +02:00
butomo1989 4b7d2aa125 Deleted unused parameter 2018-06-22 02:23:21 +02:00
butomo1989 d4832ad2b8 Fixed unit test 2018-06-22 01:37:54 +02:00
butomo1989 54d5365907 Cleaned up 2018-06-22 01:16:40 +02:00
butomo1989 2922e3ba92 Cleaned up 2018-06-22 00:34:43 +02:00
butomo1989 820b6e0e0e Enable debug modus for emulator 2018-06-21 21:16:54 +02:00
butomo1989 75514ef1f0 Updated README.md 2018-06-20 23:32:34 +02:00
butomo1989 ab34ca36d9 Enabled relaxed security 2018-06-20 23:30:54 +02:00
butomo1989 15f6541621 Fixed if-else logic 2018-06-20 23:28:41 +02:00
butomo1989 99c1b1f6b6 Using the latest base image 2018-06-20 21:10:59 +02:00
butomo1989 32258461be Enable to specify port 2018-06-19 01:20:15 +02:00
butomo1989 b7f332fd3b Added genymotion logo 2018-06-19 00:07:32 +02:00
butomo1989 09068f20c5 Formatted 2018-06-19 00:01:33 +02:00
butomo1989 59bf049159 Updated supported OS 2018-06-18 23:45:59 +02:00
butomo1989 d6b69863ca Cleaned up 2018-06-12 01:05:35 +02:00
butomo1989 68d0c2fc81 Cleaned up 2018-06-06 23:35:59 +02:00
butomo1989 5b89a28198 Renamed docker-image 2018-05-30 00:57:21 +02:00
butomo1989 705be0e3c9 Added auto-stop feature 2018-05-30 00:54:06 +02:00
butomo1989 b5f8c28fc1 Edited path 2018-05-30 00:51:16 +02:00
butomo1989 79f797213c Added integreation with geny cloud 2018-05-29 02:04:30 +02:00
butomo1989 424b6bb2ec Added script to revert a release 2018-05-29 00:09:28 +02:00
butomo1989 efccb144a4 Updated selenium hub 2018-05-29 00:08:14 +02:00
butomo1989 a960f34381 Updated base image 2018-05-28 21:02:26 +02:00
butomo1989 11e3428145 Added how to enable proxy inside container 2018-05-26 16:07:12 +02:00
butomo1989 cde35287c7 Using the latest base image 2018-05-12 13:13:21 +02:00
butomo1989 29898ba91e Fixed issue #52 2018-05-11 00:43:16 +02:00
butomo1989 2d25517bfa Using the latest version of docker-appium 2018-04-29 20:06:17 +02:00
Budi UtomoandGitHub e3219ac24b Changed order 2018-04-23 19:25:24 +02:00
Budi UtomoandGitHub c4fb6243c5 Fixed tag 2018-04-23 19:23:54 +02:00
Budi UtomoandGitHub d021fd69e6 Added video conference 2018-04-23 19:22:10 +02:00
butomo1989 cacfe568a2 Added video image 2018-04-23 21:17:41 +02:00
Diego MolinaandGitHub 9d0c66fb2b Merge branch 'master' into patch-2 2018-04-09 11:38:33 +02:00
butomo1989 cb100330ad Using appium-docker-android docker image for executing Appium UI-Test 2018-03-21 19:08:48 +01:00
butomo1989 bc0972318f Using the latest version of docker-selenium 2018-03-21 12:29:54 +01:00
Greener Chen 2b02843cfd Build docker images with play store for emulators with x86 processor and API 24 or later version 2018-03-12 01:41:16 +08:00
Budi UtomoandGitHub 3a88fa4ae4 Merge pull request #71 from greenerchen/patch-1
Add instructions for VMWare or Parallels Desktop
2018-03-05 13:44:18 +01:00
Greener Chen 398a694ccd Add supplementary images 2018-03-05 18:37:19 +08:00
Greener ChenandGitHub 14a29344b8 Add instructions for VMWare or Parallels Desktop 2018-03-05 18:28:07 +08:00
butomo1989 47621a7ccb Added sample how to build Android project 2018-02-17 10:00:03 +01:00
butomo1989 c1d66496fb Added GitHub templates 2018-02-17 09:59:09 +01:00
Budi UtomoandGitHub 1365ec736b Replaced code line 2018-02-13 11:18:50 +01:00
butomo1989 4aee17de2d Deleted unused image 2018-02-12 18:47:02 +01:00
butomo1989 5c9ad32522 Automated some steps in screen mirroring for real device 2018-02-12 18:09:14 +01:00
butomo1989 366aa8b3b3 Added real device configuration in docker-compose 2018-02-12 11:07:37 +01:00
butomo1989 905f2c723b Using the latest base image 2018-02-12 10:49:26 +01:00
Budi UtomoandGitHub 0e028d9a4a Updated version of docker-selenium hub 2018-02-06 20:33:24 +01:00
butomo1989 ce61b992f9 Using the newest version of base image 2018-01-29 16:57:46 +01:00
butomo1989 e62573036c Added dockerandroid logo 2017-11-23 21:03:12 +01:00
butomo1989 e27b2e5fdf Edited permission 2017-11-21 15:39:08 +01:00
butomo1989 fdd4a86c40 Merge remote-tracking branch 'origin/master' into release-0.9 2017-11-14 15:40:21 +01:00
Budi UtomoandGitHub 15012fd3b4 Edited README.md 2017-11-14 15:38:46 +01:00
butomo1989 1f440e1a07 Using the latest image 2017-11-09 11:44:35 +01:00
butomo1989 567a494ccb Using new usage process of new SDK 2017-11-09 11:25:21 +01:00
butomo1989 d28c4dc5e0 Fixed docker images 2017-11-07 17:33:22 +01:00
butomo1989 7a052b7e2f Merge remote-tracking branch 'origin' into update-sdk 2017-11-03 12:26:05 +01:00
butomo1989 988397318f Updated README.md 2017-11-03 11:15:38 +01:00
butomo1989 0d6356ba47 Upgraded README.md 2017-11-01 15:53:25 +01:00
butomo1989 0ea71ea6b8 Refactored auto-recording function 2017-10-30 20:42:36 +01:00
butomo1989 08ff64d950 Fixed docker-compose volume 2017-10-30 20:41:27 +01:00
butomo1989 fcffca21ff Fixed error due to file name 2017-10-27 21:02:00 +02:00
butomo1989 95adfd1fbd Installed jq 2017-10-27 21:00:10 +02:00
butomo1989 5029d33528 Fixed error 2017-10-27 20:59:19 +02:00
Budi UtomoandGitHub c9ab42ecfb Merge pull request #28 from thelittlefireman/master
fix file error when start/stop/start container
2017-08-01 16:16:12 +02:00
thelittlefiremanandGitHub 7c48af9b84 fix codacy-bot warrning 2017-08-01 10:30:04 +02:00
thelittlefiremanandGitHub e1d6e3cdbe delete useless code 2017-07-31 15:58:38 +02:00
thelittlefiremanandGitHub 648010d519 delete useless code 2017-07-31 15:56:50 +02:00
thelittlefiremanandGitHub 9d3cb60f41 add unit test last case 2017-07-31 15:28:33 +02:00
thelittlefiremanandGitHub e2ad6b75d2 add unit test to symlink_force 2017-07-31 15:12:46 +02:00
thelittlefiremanandGitHub 486fb5825b fix bad python impl 2017-07-29 22:51:36 +02:00
thelittlefiremanandGitHub e56eb0e3ab fix : file already exist on start and stop container 2017-07-28 22:45:34 +02:00
thelittlefiremanandGitHub 6fe6a80f40 Merge pull request #1 from thelittlefireman/thelittlefireman-fix-files-already-exist
fix python error when files already exist
2017-07-28 15:15:08 +02:00
thelittlefiremanandGitHub f7b30c3129 fix python error when files already exist
related to :
```
  File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main                                                                                                                                 
    "__main__", mod_spec)                                                                                                                                                                              
  File "/usr/lib/python3.5/runpy.py", line 85, in _run_code                                                                                                                                            
    exec(code, run_globals)                                                                                                                                                                            
  File "/root/src/app.py", line 189, in <module>                                                                                                                                                       
    run()                                                                                                                                                                                              
  File "/root/src/app.py", line 178, in run                                                                                                                                                            
    prepare_avd(device, avd_name)                                                                                                                                                                      
  File "/root/src/app.py", line 74, in prepare_avd                                                                                                                                                     
    os.symlink(os.path.join(skin_rsc_path, s), os.path.join(skin_dst_path, s))                                                                                                                         
FileExistsError: [Errno 17] File exists: '/root/devices/skins/galaxy_nexus' -> '/root/platforms/android-25/skins/galaxy_nexus'                                                                         
Traceback (most recent call last):                                                                                                                                                                     
  File "/usr/lib/python3.5/runpy.py", line 184, in _run_module_as_main                                                                                                                                 
    "__main__", mod_spec)                                                                                                                                                                              
  File "/usr/lib/python3.5/runpy.py", line 85, in _run_code                                                                                                                                            
    exec(code, run_globals)                                                                                                                                                                            
  File "/root/src/app.py", line 189, in <module>                                                                                                                                                       
    run()                                                                                                                                                                                              
  File "/root/src/app.py", line 178, in run                                                                                                                                                            
    prepare_avd(device, avd_name)                                                                                                                                                                      
  File "/root/src/app.py", line 74, in prepare_avd                                                                                                                                                     
    os.symlink(os.path.join(skin_rsc_path, s), os.path.join(skin_dst_path, s))                                                                                                                         
FileExistsError: [Errno 17] File exists: '/root/devices/skins/galaxy_nexus' -> '/root/platforms/android-25/skins/galaxy_nexus' 
```
2017-07-28 15:13:45 +02:00
butomo1989 1062da3dcc Fixed installation issue 2017-07-18 17:44:09 +02:00
butomo1989 c431118465 Using the latest image version of appium-docker-android 2017-07-18 12:06:38 +02:00
butomo1989 b6a1a57bed Enable video recording 2017-07-14 20:40:14 +02:00
butomo1989 83baa09384 Fixed not expected error in supervisor 2017-07-13 18:55:32 +02:00
Budi UtomoandGitHub 8a69c64de3 Merge pull request #22 from andrcuns/real_device_mirroring
Real device mirroring
2017-07-08 23:57:52 +02:00
Andrejs Cunskis 488e53149c Release script for image with real device support 2017-07-07 23:46:04 +03:00
Andrejs Cunskis 2bc30edf4c Add support for real device and screen mirroring 2017-07-03 22:50:37 +03:00
butomo1989 8d544448f1 All badges in one line 2017-06-29 09:05:56 +02:00
The Gitter BadgerandBudi Utomo f7b560a28b Add Gitter badge (#19) 2017-06-29 09:04:05 +02:00
394 changed files with 5694 additions and 1810 deletions
+28
View File
@@ -0,0 +1,28 @@
# Git
.git/
.github
.gitignore
# IDE
**/*.idea
backup
# Python
**/*.egg-info
**/*.pyc
**/__pycache__
**/venv
# Unit Test
**/.coverage
**/coverage.xml
**/xunit.xml
**/coverage
tmp/
docker
documentations
example
images
*.md
*.sh
+3
View File
@@ -0,0 +1,3 @@
github: [budtmo]
custom:
- "paypal.me/budtmo"
+45
View File
@@ -0,0 +1,45 @@
name: 🐛 Bug Report
description: File a bug report
title: "[🐛 Bug ]: "
labels: [bug]
body:
- type: input
id: operating-system
attributes:
label: Operating System
description: Which host operating system do you use?
placeholder: e.g. OSX Yosemite / Ubuntu 20.04 / Windows 10 etc
validations:
required: true
- type: input
id: docker-image
attributes:
label: Docker Image
description: Which docker image do you use?
placeholder: e.g. budtmo/docker-android:emulator_10.0_v2.0 / budtmo/docker-android:genymotion_v2.0 etc
validations:
required: true
- type: textarea
id: expected-behaviour
attributes:
label: Expected behaviour
description: |
What behaviour that you expected?
validations:
required: true
- type: textarea
id: actual-behaviour
attributes:
label: Actual behaviour
description: |
What is the actual behaviour?
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs
description: |
Please provide logs here
validations:
required: false
@@ -0,0 +1,45 @@
name: 🐛 [Pro version] Bug Report
description: File a bug report
title: "[🐛 PRO | Bug ]: "
labels: [bug, pro]
body:
- type: input
id: operating-system
attributes:
label: Operating System
description: Which host operating system do you use?
placeholder: e.g. OSX Yosemite / Ubuntu 20.04 / Windows 10 etc
validations:
required: true
- type: input
id: docker-image
attributes:
label: Docker Image
description: Which docker image do you use?
placeholder: e.g. budtmo/docker-android-pro:emulator_10.0_v2.0 / budtmo/docker-android-pro:emulator_headless_10.0_v2.0 etc
validations:
required: true
- type: textarea
id: expected-behaviour
attributes:
label: Expected behaviour
description: |
What behaviour that you expected?
validations:
required: true
- type: textarea
id: actual-behaviour
attributes:
label: Actual behaviour
description: |
What is the actual behaviour?
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs
description: |
Please provide logs here
validations:
required: false
+5
View File
@@ -0,0 +1,5 @@
blank_issues_enabled: false
contact_links:
- name: 📖 Docker-Android Documentation
url: https://github.com/budtmo/docker-android
about: Please read the whole project README before filling out an issue.
+29
View File
@@ -0,0 +1,29 @@
name: 🚀 Feature Request
description: Submit your idea to have cool feature(s)
title: "[🚀 Feature Request ]: "
labels: [feature-request]
body:
- type: textarea
id: idea
attributes:
label: Idea
description: |
What is the idea that you want to share to improve the project?
validations:
required: true
- type: textarea
id: problem
attributes:
label: Probelm to solve
description: |
What is the problem that you want to solve with requested feature?
validations:
required: true
- type: textarea
id: Note
attributes:
label: Additional Note
description: |
Please share any additional information here if needed
validations:
required: false
+8
View File
@@ -0,0 +1,8 @@
### Types of changes
_Put an `x` in the boxes that apply_
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
### Purpose of changes
<!-- Please describe why this change is required / What problem you want to solve. -->
+40
View File
@@ -0,0 +1,40 @@
version: 2
updates:
- package-ecosystem: docker
directory: "/docker"
schedule:
interval: daily
time: '01:00'
timezone: "Europe/Berlin"
commit-message:
prefix: "[docker] "
target-branch: "master"
open-pull-requests-limit: 99
reviewers:
- "budtmo"
- package-ecosystem: pip
directory: "/"
schedule:
interval: daily
time: '01:00'
timezone: "Europe/Berlin"
commit-message:
prefix: "[pip] "
target-branch: "master"
open-pull-requests-limit: 99
reviewers:
- "budtmo"
- package-ecosystem: github-actions
directory: "/"
schedule:
interval: daily
time: '01:00'
timezone: "Europe/Berlin"
commit-message:
prefix: "[github-action] "
target-branch: "master"
open-pull-requests-limit: 99
reviewers:
- "budtmo"
+88
View File
@@ -0,0 +1,88 @@
name: Release
on:
push:
tags:
- 'v*.*-*'
jobs:
run_test:
runs-on: ubuntu-24.04
strategy:
matrix:
python-version: ["3.8"]
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Run unit-test
run: script -e -c "./app.sh test emulator test 11.0 && sudo mv tmp/* ."
release_base:
runs-on: ubuntu-24.04
needs: run_test
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Get release version
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Build and push base image (${RELEASE_VERSION})
run: |
docker login -u=${{secrets.DOCKER_USERNAME}} -p=${{secrets.DOCKER_PASSWORD}}
./app.sh push base ${RELEASE_VERSION}
docker logout
release_emulator:
runs-on: ubuntu-24.04
needs: release_base
strategy:
matrix:
android: ["9.0", "10.0", "11.0", "12.0", "13.0", "14.0"]
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Get release version
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up extension
run: |
echo "${{ secrets.extension }}" > extension.sh
chmod 700 extension.sh
shell: bash
- name: Build and push emulator image ${{ matrix.android }} (${RELEASE_VERSION})
run: |
docker login -u=${{secrets.DOCKER_USERNAME}} -p=${{secrets.DOCKER_PASSWORD}}
./app.sh push emulator ${RELEASE_VERSION} ${{ matrix.android }}
docker logout
release_genymotion:
runs-on: ubuntu-24.04
needs: release_base
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Get release version
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up extension
run: |
echo "${{ secrets.extension }}" > extension.sh
chmod 700 extension.sh
shell: bash
- name: Build and push genymotion image (${RELEASE_VERSION})
run: |
docker login -u=${{secrets.DOCKER_USERNAME}} -p=${{secrets.DOCKER_PASSWORD}}
./app.sh push genymotion ${RELEASE_VERSION}
docker logout
+32
View File
@@ -0,0 +1,32 @@
name: Run Test on Demand
on:
workflow_dispatch:
jobs:
build_and_test:
runs-on: ubuntu-24.04
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Set up extension
run: |
echo "${{ secrets.extension }}" > extension.sh
chmod 700 extension.sh
shell: bash
- name: Build base image
run: script -e -c "./app.sh build base test"
- name: Build sample image
run: script -e -c "./app.sh build emulator test 11.0"
- name: Run unit-test
run: script -e -c "./app.sh test emulator test 11.0 && sudo mv tmp/* ."
- name: Publish test result
run: bash <(curl -s https://codecov.io/bash)
+35
View File
@@ -0,0 +1,35 @@
name: Run Test
on:
push:
branches:
- master
jobs:
build_and_test:
runs-on: ubuntu-24.04
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && github.actor == 'budtmo'
steps:
- name: Checkout the repo
uses: actions/checkout@v6
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v4
- name: Set up extension
run: |
echo "${{ secrets.extension }}" > extension.sh
chmod 700 extension.sh
shell: bash
- name: Build base image
run: script -e -c "./app.sh build base test"
- name: Build sample image
run: script -e -c "./app.sh build emulator test 11.0"
- name: Run unit-test
run: script -e -c "./app.sh test emulator test 11.0 && sudo mv tmp/* ."
- name: Publish test result
run: bash <(curl -s https://codecov.io/bash)
+19 -8
View File
@@ -1,9 +1,20 @@
.idea/*
.DS_Store
*.pyc
# IDE
**/*.idea
backup
# Coverage
.coverage
coverage.xml
xunit.xml
coverage/*
# Python
**/*.egg-info
**/*.pyc
**/__pycache__
**/venv
# Unit Test
**/.coverage
**/coverage.xml
**/xunit.xml
**/coverage
tmp/
# Dev-files
n*.txt
e*.sh
-24
View File
@@ -1,24 +0,0 @@
language: python
python:
- "3.5"
sudo: required
services:
- docker
install: "pip install -r requirements.txt"
env:
matrix:
- ANDROID_VERSION=5.0.1
- ANDROID_VERSION=5.1.1
- ANDROID_VERSION=6.0
- ANDROID_VERSION=7.0
- ANDROID_VERSION=7.1.1
script: bash travis.sh
after_success:
- bash <(curl -s https://codecov.io/bash)
-13
View File
@@ -1,13 +0,0 @@
Copyright 2016 budi utomo
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+46
View File
@@ -0,0 +1,46 @@
## License Information
Copyright 2023 budi utomo
This program is subject to the terms of the Apache License, Version 2.0 AND the following amendments on forks and data processing. Thus, this is a Custom Apache 2.0 License, NOT a dual-license model you may choose from.
You can obtain a copy of the license at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
## Forks
Additionally to Apache-2.0, when you fork this repo you are required to either remove our Google Form ID: 1FAIpQLSdrKWQdMh6Nt8v8NQdYvTIntohebAgqWCpXT3T9NofAoxcpkw or stop usage gathering completely.
## Data processing agreement
By using this software you agree that the following non-PII (non personally identifiable information) data will be collected, processed and used by the maintainers for the purpose of improving the docker-android project.
By using this software you also grant us a nonexclusive, irrevocable, world-wide, perpetual royalty-free permission to use, modify and publish these data for all purposes, internally or publicly, including the right to sub-license said permission rights.
We collect, process and use the following data:
* Date and time when Docker-Android started
* User (it will collect the information about Release Version of Machine), e.g. Linux-5.4.0-146-generic-x86_64-with-glibc2.29_#163-Ubuntu_SMP_Fri_Mar_17_18:26:02_UTC_2023. This does not allow us to track individual users but does enable us to accurately measure user counts
* City (the information come from https://ipinfo.io)
* Region (the information come from https://ipinfo.io)
* Country (the information come from https://ipinfo.io)
* Release version of Docker-Android
* Appium (Whether user use Appium or not - The possible value will be "true" or "false")
* Appium Additional Arguments
* Web-Log (Whether user use Web-Log feature or not - The possible value will be "true" or "false")
* Web-Vnc (Whether user use Web-Vnc feature or not - The possible value will be "true" or "false")
* Screen-Resolution
* Device Type (Which docker image is used - The possible value will be "emulator" or "geny_cloud" or "geny_aws")
* Emulator Device (Which device profile and skin is used if the user use device_type "emulator")
* Emulator Android Version (Which Android version is used if the user use device_type "emulator"
* Emulator No-Skin feature (Whether user use no-skin feature or not - The possible value will be "true" or "false")
* Emulator Data Partition
* Emulator Additional Arguments
## End of License Information
More information about anonymized data collection can be seen [here](./documentations/USER_BEHAVIOR_ANALYTICS.md)
-1
View File
@@ -1 +0,0 @@
Budi Utomo <budi.ut.1989@gmail.com>
+1
View File
@@ -0,0 +1 @@
Budi Utomo <budtmo.os@gmail.com>
+122 -146
View File
@@ -1,208 +1,184 @@
Docker-Android
==============
[![Build Status](https://travis-ci.org/butomo1989/docker-android.svg?branch=master)](https://travis-ci.org/butomo1989/docker-android)
[![codecov](https://codecov.io/gh/butomo1989/docker-android/branch/master/graph/badge.svg)](https://codecov.io/gh/butomo1989/docker-android)
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/3f000ffb97db45a59161814e1434c429)](https://www.codacy.com/app/butomo1989/docker-appium?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=butomo1989/docker-appium&amp;utm_campaign=Badge_Grade)
<p align="center">
<img id="header" src="./images/logo_docker-android.png" />
</p>
Docker-Android is a docker image built to be used for everything related to mobile website testing and Android project.
[![Paypal Donate](https://img.shields.io/badge/paypal-donate-blue.svg)](http://paypal.me/budtmo) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![codecov](https://codecov.io/gh/budtmo/docker-android/branch/master/graph/badge.svg)](https://codecov.io/gh/budtmo/docker-android) [![Join the chat at https://gitter.im/budtmo/docker-android](https://badges.gitter.im/budtmo/docker-android.svg)](https://gitter.im/budtmo/docker-android?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![GitHub release](https://img.shields.io/github/release/budtmo/docker-android.svg)](https://github.com/budtmo/docker-android/releases)
Samsung Device | Google Device
:---------------------------:|:---------------------------:
![][docker android samsung] | ![][docker android nexus]
Docker-Android is a docker image built to be used for everything related to Android. It can be used for Application development and testing (native, web and hybrid-app).
Purpose
-------
1. Run UI tests for mobile websites with [appium]
2. Build Android project and run unit tests with the latest build-tools
3. Run UI tests for Android applications with different frameworks ([appium], [espresso], [robotium], etc.)
4. Run monkey / stress tests
5. SMS testing
Advantages compare with other docker-android projects
-----------------------------------------------------
1. noVNC to see what happen inside docker container
2. Emulator for different devices / skins, such as Samsung Galaxy S6, LG Nexus 4, HTC Nexus One and more.
3. Ability to connect to Selenium Grid
Advantages of using this project
--------------------------------
1. Emulator with different device profile and skins, such as Samsung Galaxy S6, LG Nexus 4, HTC Nexus One and more.
2. Support vnc to be able to see what happen inside docker container
3. Support log sharing feature where all logs can be accessed from web-UI
4. Ability to control emulator from outside container by using adb connect
5. Open source with more features coming (monkey test, support real devices with screen mirroring and video recording)
5. Integrated with other cloud solutions, e.g. [Genymotion Cloud](https://www.genymotion.com/cloud/)
6. It can be used to build Android project
7. It can be used to run unit and UI-Test with different test-frameworks, e.g. Appium, Espresso, etc.
List of Docker images
List of Docker-Images
---------------------
|Supported OS |Android version |API level |Image name |Image status |
|:---|:---|:---|:---|:---:|
|Linux|5.0.1|21|butomo1989/docker-android-x86-5.0.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-x86-5.0.1.svg)](https://microbadger.com/images/butomo1989/docker-android-x86-5.0.1 "Get your own image badge on microbadger.com")|
|Linux|5.1.1|22|butomo1989/docker-android-x86-5.1.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-x86-5.1.1.svg)](https://microbadger.com/images/butomo1989/docker-android-x86-5.1.1 "Get your own image badge on microbadger.com")|
|Linux|6.0|23|butomo1989/docker-android-x86-6.0|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-x86-6.0.svg)](https://microbadger.com/images/butomo1989/docker-android-x86-6.0 "Get your own image badge on microbadger.com")|
|Linux|7.0|24|butomo1989/docker-android-x86-7.0|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-x86-7.0.svg)](https://microbadger.com/images/butomo1989/docker-android-x86-7.0 "Get your own image badge on microbadger.com")|
|Linux|7.1.1|25|butomo1989/docker-android-x86-7.1.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-x86-7.1.1.svg)](https://microbadger.com/images/butomo1989/docker-android-x86-7.1.1 "Get your own image badge on microbadger.com")|
|OSX / Windows|5.0.1|21|butomo1989/docker-android-arm-5.0.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-arm-5.0.1.svg)](https://microbadger.com/images/butomo1989/docker-android-arm-5.0.1 "Get your own image badge on microbadger.com")|
|OSX / Windows|5.1.1|22|butomo1989/docker-android-arm-5.1.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-arm-5.1.1.svg)](https://microbadger.com/images/butomo1989/docker-android-arm-5.1.1 "Get your own image badge on microbadger.com")|
|OSX / Windows|6.0|23|butomo1989/docker-android-arm-6.0|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-arm-6.0.svg)](https://microbadger.com/images/butomo1989/docker-android-arm-6.0 "Get your own image badge on microbadger.com")|
|OSX / Windows|7.0|24|butomo1989/docker-android-arm-7.0|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-arm-7.0.svg)](https://microbadger.com/images/butomo1989/docker-android-arm-7.0 "Get your own image badge on microbadger.com")|
|OSX / Windows|7.1.1|25|butomo1989/docker-android-arm-7.1.1|[![](https://images.microbadger.com/badges/image/butomo1989/docker-android-arm-7.1.1.svg)](https://microbadger.com/images/butomo1989/docker-android-arm-7.1.1 "Get your own image badge on microbadger.com")|
|Android |API |Image with latest release version |Image with specific release version|
|:---|:---|:---|:---|
|9.0|28|budtmo/docker-android:emulator_9.0|budtmo/docker-android:emulator_9.0_<release_version>|
|10.0|29|budtmo/docker-android:emulator_10.0|budtmo/docker-android:emulator_10.0_<release_version>|
|11.0|30|budtmo/docker-android:emulator_11.0|budtmo/docker-android:emulator_11.0_<release_version>|
|12.0|32|budtmo/docker-android:emulator_12.0|budtmo/docker-android:emulator_12.0_<release_version>|
|13.0|33|budtmo/docker-android:emulator_13.0|budtmo/docker-android:emulator_13.0_<release_version>|
|14.0|34|budtmo/docker-android:emulator_14.0|budtmo/docker-android:emulator_14.0_<release_version>|
|-|-|budtmo/docker-android:genymotion|budtmo/docker-android:genymotion_<release_version>|
List of Devices
---------------
Type | Device Name
----- | -----
Phone | Samsung Galaxy S10
Phone | Samsung Galaxy S9
Phone | Samsung Galaxy S8
Phone | Samsung Galaxy S7 Edge
Phone | Samsung Galaxy S7
Phone | Samsung Galaxy S6
Phone | Nexus 4
Phone | Nexus 5
Phone | Nexus One
Phone | Nexus S
Tablet | Nexus 7
Tablet | Pixel C
Requirements
------------
Docker is installed in your system.
1. Docker is installed on your system.
Quick Start
-----------
1. Run docker-android
1. If you use ***Ubuntu OS*** on your host machine, you can skip this step. For ***OSX*** and ***Windows OS*** user, you need to use Virtual Machine that support Virtualization with Ubuntu OS because the image can be run under ***Ubuntu OS only***.
- For ***Linux OS***, please use image name that contains "x86"
2. Your machine should support virtualization. To check if the virtualization is enabled is:
```
sudo apt install cpu-checker
kvm-ok
```
```bash
docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" --name android-container butomo1989/docker-android-x86-7.1.1
```
3. Run Docker-Android container
```
docker run -d -p 6080:6080 -e EMULATOR_DEVICE="Samsung Galaxy S10" -e WEB_VNC=true --device /dev/kvm --name android-container budtmo/docker-android:emulator_11.0
```
- For ***OSX*** and ***Windows OS***, please use image name that contains "arm"
4. Open ***http://localhost:6080*** to see inside running container.
```bash
docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" --name android-container butomo1989/docker-android-arm-7.1.1
```
5. To check the status of the emulator
```
docker exec -it android-container cat device_status
```
2. Verify the ip address of docker host.
Persisting data
-----------
- For OSX, you can find out by using following command:
The default behaviour is to destroy the emulated device on container restart. To persist data, you need to mount a volume at `/home/androidusr`:
```
docker run -v data:/home/androidusr budtmo/docker-android:emulator_11.0
```
```bash
docker-machine ip default
```
WSL2 Hardware acceleration (Windows 11 only)
-----------
- For different OS, localhost should work.
Credit goes to [Guillaume - The Parallel Interface blog](https://www.paralint.com/2022/11/find-new-modified-and-unversioned-subversion-files-on-windows)
3. Open ***http://docker-host-ip-address:6080*** from web browser.
[Microsoft - Advanced settings configuration in WSL](https://learn.microsoft.com/en-us/windows/wsl/wsl-config)
Run Appium Server
-----------------
Appium is automation test framework to test mobile website and mobile application, including android. To be able to use appium, you need to run appium-server. You run appium server inside docker-android container by ***opening port 4723*** and ***passing an environment variable APPIUM=TRUE***.
1. Add yourself to the `kvm` usergroup.
```
sudo usermod -a -G kvm ${USER}
```
```bash
docker run --privileged -d -p 6080:6080 -p 5554:5554 -p 5555:5555 -p 4723:4723 -e DEVICE="Samsung Galaxy S6" -e APPIUM=True --name android-container butomo1989/docker-android-x86-7.1.1
```
2. Add necessary flags to `/etc/wsl.conf` to their respective sections.
```
[boot]
command = /bin/bash -c 'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm'
```
### Connect to Selenium Grid
Then, using PowerShell, open a notepad on `notepad $env:USERPROFILE\.wslconfig`. Inside, put these other flags:
```
[wsl2]
nestedVirtualization=true
```
It is also possible to connect appium server that run inside docker-android with selenium grid by passing following environment variables:
4. Restart WSL2 via CMD prompt or Powershell
```
wsl --shutdown
```
- CONNECT\_TO\_GRID=True
- APPIUM_HOST="\<host\_ip\_address>"
- APPIUM_PORT=\<port\_number>
- SELENIUM_HOST="\<host\_ip\_address>"
- SELENIUM_PORT=\<port\_number>
To run tests for mobile browser, following parameter can be passed:
`command = /bin/bash -c 'chown -v root:kvm /dev/kvm && chmod 660 /dev/kvm'` sets `/dev/kvm` to `kvm` usergroup rather than the default `root` usergroup on WSL2 startup.
- MOBILE\_WEB\_TEST=True
`nestedVirtualization` flag is only available to Windows 11.
```bash
docker run --privileged -d -p 6080:6080 -p 4723:4723 -p 5554:5554 -p 5555:5555 -e DEVICE="Samsung Galaxy S6" -e APPIUM=True -e CONNECT_TO_GRID=True -e APPIUM_HOST="127.0.0.1" -e APPIUM_PORT=4723 -e SELENIUM_HOST="172.17.0.1" -e SELENIUM_PORT=4444 -e MOBILE_WEB_TEST=True --name android-container butomo1989/docker-android-x86-7.1.1
```
If this setup does not work, you may have an old WSL version. In that case, ignore `\.wslconfig` and put everything on `/etc/wsl.conf`, including the `[wsl2]` flag.
### Share Volume
Use-Cases
---------
If you want to use appium to test UI of your android application, you need to share volume where the APK is located to folder ***/root/tmp***.
1. [Build Android project](./documentations/USE_CASE_BUILD_ANDROID_PROJECT.md)
2. [UI-Test with Appium](./documentations/USE_CASE_APPIUM.md)
3. [Control Android emulator on host machine](./documentations/USE_CASE_CONTROL_EMULATOR.md)
4. [SMS Simulation](./documentations/USE_CASE_SMS.md)
5. [Jenkins](./documentations/USE_CASE_JENKINS.md)
6. [Deploying on cloud (Azure, AWS, GCP)](./documentations/USE_CASE_CLOUD.md)
```bash
docker run --privileged -d -p 6080:6080 -p 4723:4723 -p 5554:5554 -p 5555:5555 -v $PWD/example/sample_apk:/root/tmp -e DEVICE="Nexus 5" -e APPIUM=True -e CONNECT_TO_GRID=True -e APPIUM_HOST="127.0.0.1" -e APPIUM_PORT=4723 -e SELENIUM_HOST="172.17.0.1" -e SELENIUM_PORT=4444 --name android-container butomo1989/docker-android-x86-7.1.1
```
Custom-Configurations
---------------------
### Docker-Compose
This [document](./documentations/CUSTOM_CONFIGURATIONS.md) contains information about configurations that can be used to enable some features, e.g. log-sharing, etc.
![][compose]
![][connected_devices]
Genymotion
----------
There is [example of compose file] to run complete selenium grid and docker-android container as nodes. [docker-compose] version [1.13.0] or higher is required to be able to execute that compose file.
<p align="center">
<img id="geny" src="./images/logo_genymotion_and_dockerandroid.png" />
</p>
```bash
docker-compose up -d
```
For you who do not have ressources to maintain the simulator or to buy machines or need different device profiles, you can give a try by using [Genymotion SAAS](https://cloud.geny.io/). Docker-Android is [integrated with Genymotion](https://www.genymotion.com/blog/partner_tag/docker/) on different cloud services, e.g. Genymotion SAAS, AWS, GCP, Alibaba Cloud. Please follow [this document](./documentations/THIRD_PARTY_GENYMOTION.md) for more detail.
Control android emulator outside container
------------------------------------------
```bash
adb connect <docker-machine-ip-address>:5555
```
![][adb_connection]
**Note:** You need to have Android Debug Bridge (adb) installed in your host machine.
SMS Simulation
Emulator Skins
--------------
The Emulator skins are taken from [Android Studio IDE](https://developer.android.com/studio) and [Samsung Developer Website](https://developer.samsung.com/)
1. Using telnet
- Find the auth_token and copy it.
USERS
-----
```bash
docker exec -it android-container cat /root/.emulator_console_auth_token
```
<a href="https://lookerstudio.google.com/s/iGaemHJqQvg">
<p align="center">
<img src="./images/docker-android_users.png" alt="docker-android-users" width="800" height="600">
</p>
</a>
- Access emulator using telnet and login with auth_token
PRO VERSION
-----------
```bash
telnet <docker-machine-ip-address> 5554
```
Due to high requests for help and to be able to actively maintain the projects, the creator has decided to create docker-android-pro. Docker-Android-Pro is a sponsor based project which mean that the docker image of pro-version can be pulled only by [active sponsor](https://github.com/sponsors/budtmo).
- Login with given auth_token from 1.step
The differences between normal version and pro version are:
```bash
auth <auth_token>
```
|Feature |Normal |Pro |Comment|
|:---|:---|:---|:---|
|user-behavior-analytics|Yes|No|-|
|proxy|No|Yes|Set up company proxy on Android emulator on fly|
|language|No|Yes|Set up language on Android emulator on fly|
|Newer Android version|No|Yes|Support other newer Android version e.g. Android 15, Android 16, etc|
|root-privileged|No|Yes|Able to run command with security privileged|
|headless-mode|No|Yes|Save resources by using headless mode|
|Selenium 4.x integration|No|Yes|Running Appium UI-Tests againt one (Selenium Hub) endpoint for Android- and iOS emulator(s) / device(s)|
|multiple Android-Simulators|No|Yes (soon)|Save resources by having multiple Android-Simulators on one docker-container|
|Google Play Store|No|Yes (soon)|-|
|Video Recording|No|Yes (soon)|Helpful for debugging|
- Send the sms
This [document](./documentations/DOCKER-ANDROID-PRO.md) contains detail information about how to use docker-android-pro.
```bash
sms send <phone_number> <message>
```
2. Using adb
```bash
docker exec -it android-container adb emu sms send <phone_number> <message>
```
3. You can also integrate it inside project using adb library.
![][sms]
Troubleshooting
---------------
All logs inside container are stored under folder **/var/log/supervisor**. you can print out log file by using **docker exec**. Example:
```bash
docker exec -it android-container tail -f /var/log/supervisor/docker-android.stdout.log
```
[appium]: <https://appium.io>
[espresso]: <https://google.github.io/android-testing-support-library/docs/espresso/>
[robotium]: <https://github.com/RobotiumTech/robotium>
[docker android samsung]: <images/docker_android_samsung.png>
[docker android nexus]: <images/docker_android_nexus.png>
[compose]: <images/compose.png>
[connected_devices]: <images/connected_devices.png>
[example of compose file]: <docker-compose.yml>
[docker-compose]: <https://docs.docker.com/compose/install/>
[1.13.0]: <https://github.com/docker/compose/releases/tag/1.13.0>
[adb_connection]: <images/adb_connection.png>
[sms]: <images/SMS.png>
LICENSE
-------
See [License](LICENSE.md)
Executable
+125
View File
@@ -0,0 +1,125 @@
#!/bin/bash
function is_str_in_list(){
local given_str=${1}
local list_str=${@:2}
if [[ ! " ${list_str[*]} " =~ " ${given_str} " ]]; then
echo "${given_str} is not supported!"
exit 1
fi
}
tasks=("test" "build" "push")
if [ -z "${1}" ]; then
read -p "Task ($(echo "${tasks[@]}" | tr ' ' '|')) : " t
else
t=${1}
fi
is_str_in_list ${t} ${tasks[@]}
projects=("base" "emulator" "genymotion" "pro-emulator" "pro-emulator_headless")
if [ -z "${2}" ]; then
read -p "Project ($(echo "${projects[@]}" | tr ' ' '|')) : " p
else
p=${2}
fi
is_str_in_list ${p} ${projects[@]}
if [ -z "${3}" ]; then
read -p "Release Version (v2.0.0-p0|v2.0.0-p1|etc) : " r_v
else
r_v=${3}
fi
FOLDER_PATH=""
IMAGE_NAME=""
TAG_NAME=""
if [[ "${p}" == "pro"* ]]; then
IFS='-' read -ra arr <<<"${p}"
FOLDER_PATH+="docker/${arr[0]}/${arr[1]}"
IMAGE_NAME+="budtmo2/docker-android-${arr[0]}"
TAG_NAME+="${arr[1]}"
else
FOLDER_PATH+="docker/${p}"
IMAGE_NAME+="budtmo/docker-android"
TAG_NAME+="${p}"
fi
if [[ "${p}" == *"emulator"* ]]; then
supported_android_version=("9.0" "10.0" "11.0" "12.0" "13.0" "14.0")
declare -A api_levels=(
["9.0"]=28
["10.0"]=29
["11.0"]=30
["12.0"]=32
["13.0"]=33
["14.0"]=34
)
# To get the last index
keys=("${!api_levels[@]}")
sorted_keys=($(printf '%s\n' "${keys[@]}" | sort))
last_key=${keys[-2]} # because 9.0 will be last
if [ -z "${4}" ]; then
read -p "Android Version ($(echo "${supported_android_version[@]}" \
| tr ' ' '|')) : " a_v
else
a_v=${4}
fi
is_str_in_list ${a_v} ${supported_android_version[@]}
a_l=${api_levels[${a_v}]}
TAG_NAME+="_${a_v}"
fi
IMAGE_NAME_LATEST="${IMAGE_NAME}:${TAG_NAME}"
TAG_NAME+="_${r_v}"
IMAGE_NAME_SPECIFIC_RELEASE=${IMAGE_NAME}:${TAG_NAME}
echo "${IMAGE_NAME_SPECIFIC_RELEASE} or ${IMAGE_NAME_LATEST} "
function build() {
# autopep8 --recursive --exclude=.git,__pycache__,venv --max-line-length=120 --in-place .
cmd="docker build --no-cache -t ${IMAGE_NAME_SPECIFIC_RELEASE} --build-arg DOCKER_ANDROID_VERSION=${r_v} "
if [ -n "${a_v}" ]; then
DOCKER_BUILDKIT=1
cmd="${cmd} --secret id=extension,src=extension.sh --build-arg EMULATOR_ANDROID_VERSION=${a_v} --build-arg EMULATOR_API_LEVEL=${a_l} "
fi
if [[ "${p}" == *"genymotion"* ]]; then
DOCKER_BUILDKIT=1
cmd="${cmd} --secret id=extension,src=extension.sh "
fi
cmd+="-f ${FOLDER_PATH} ."
${cmd}
docker tag ${IMAGE_NAME_SPECIFIC_RELEASE} ${IMAGE_NAME_LATEST}
if [ -n "${a_v}" ] && [ "${a_v}" = "${last_key}" ]; then
echo "${a_v} is the last version in the list, will use it as default image tag"
docker tag ${IMAGE_NAME_SPECIFIC_RELEASE} ${IMAGE_NAME}:latest
fi
}
function test() {
tmp_folder="/app/tmp"
mkdir -p tmp
docker run -it --rm -v "$PWD":/app -w /app python:3.12-slim bash \
-c "cd cli && rm -rf ${tmp_folder}/* && \
pip install --upgrade pip && pip install -r requirements.txt && \
PYTHONPATH=src pytest -v && mv test-results/* ${tmp_folder}/ && chown -R 1300:1301 ${tmp_folder} && \
chmod a+x -R ${tmp_folder}"
}
function push() {
build
docker push ${IMAGE_NAME_SPECIFIC_RELEASE}
docker push ${IMAGE_NAME_LATEST}
if [ -n "${a_v}" ] && [ "${a_v}" = "${last_key}" ]; then
docker push ${IMAGE_NAME}:latest
fi
}
${t}
+9
View File
@@ -0,0 +1,9 @@
autopep8==2.3.2
click==8.3.1
coverage==7.13.4
mock==5.2.0
pytest==9.0.2
pytest-cov==7.0.0
pytest-xdist==3.8.0
requests==2.32.5
setuptools==82.0.0
+7
View File
@@ -0,0 +1,7 @@
[tool:pytest]
addopts =
--cov=src
--cov-report=html:test-results/html
--cov-report=xml:test-results/coverage.xml
--junit-xml=test-results/junit-report.xml
testpaths = src/tests
+23
View File
@@ -0,0 +1,23 @@
import os
from setuptools import setup, find_packages
app_version = os.getenv("DOCKER_ANDROID_VERSION", "test-version")
with open("requirements.txt", "r") as f:
reqs = f.read().splitlines()
setup(
name="docker-android",
version="0.1",
url="https://github.com/budtmo/docker-android",
description="CLI for docker-android",
author="Budi Utomo",
author_email="budtmo.os@gmail.com",
install_requires=reqs,
packages=find_packages(where="src"),
package_dir={"": "src"},
py_modules=["cli", "docker-android"],
entry_points={"console_scripts": "docker-android=app:cli"}
)
+213
View File
@@ -0,0 +1,213 @@
#!/usr/bin/env python3
import subprocess
from typing import Union
import click
import logging
import os
from enum import Enum
from application import Application
from device import DeviceType
from device.emulator import Emulator
from device.geny_aws import GenyAWS
from device.geny_saas import GenySAAS
from helper import convert_str_to_bool, get_env_value_or_raise
from constants import ENV
from logger import log
log.init()
logger = logging.getLogger("App")
def get_device(given_input: str) -> Union[Emulator, GenyAWS, GenySAAS, None]:
"""
Get Device object based on given input
:param given_input: device in string
:return: Platform object
"""
input_lower = given_input.lower()
if input_lower == DeviceType.EMULATOR.value.lower():
emu_av = get_env_value_or_raise(ENV.EMULATOR_ANDROID_VERSION)
emu_img_type = get_env_value_or_raise(ENV.EMULATOR_IMG_TYPE)
emu_sys_img = get_env_value_or_raise(ENV.EMULATOR_SYS_IMG)
emu_device = os.getenv(ENV.EMULATOR_DEVICE, "Nexus 5")
emu_data_partition = os.getenv(ENV.EMULATOR_DATA_PARTITION, "550m")
emu_additional_args = os.getenv(ENV.EMULATOR_ADDITIONAL_ARGS, "")
emu_name = os.getenv(ENV.EMULATOR_NAME, "{d}_{v}".format(
d=emu_device.replace(" ", "_").lower(), v=emu_av))
emu = Emulator(emu_name, emu_device, emu_av, emu_data_partition,
emu_additional_args, emu_img_type, emu_sys_img)
return emu
elif input_lower == DeviceType.GENY_AWS.value.lower():
return GenyAWS()
elif input_lower == DeviceType.GENY_SAAS.value.lower():
return GenySAAS()
else:
return None
@click.group(context_settings=dict(help_option_names=['-h', '--help']))
def cli():
pass
def start_appium() -> None:
if convert_str_to_bool(os.getenv(ENV.APPIUM)):
cmd = f"/usr/local/bin/appium"
app_appium = Application("Appium", cmd,
os.getenv(ENV.APPIUM_ADDITIONAL_ARGS, ""), False)
app_appium.start()
else:
logger.info("env APPIUM cannot be found, Appium is not started!")
def start_device() -> None:
given_pt = get_env_value_or_raise(ENV.DEVICE_TYPE)
selected_device = get_device(given_pt)
if selected_device is None:
raise RuntimeError(f"'{given_pt}' is invalid! Please check again!")
selected_device.create()
selected_device.start()
selected_device.wait_until_ready()
selected_device.reconfigure()
selected_device.keep_alive()
def start_display_screen() -> None:
cmd = "/usr/bin/Xvfb"
args = f"{os.getenv(ENV.DISPLAY)} " \
f"-screen {os.getenv(ENV.SCREEN_NUMBER)} " \
f"{os.getenv(ENV.SCREEN_WIDTH)}x" \
f"{os.getenv(ENV.SCREEN_HEIGHT)}x" \
f"{os.getenv(ENV.SCREEN_DEPTH)}"
d_screen = Application("d_screen", cmd, args, False)
d_screen.start()
def start_display_wm() -> None:
cmd = "/usr/bin/openbox-session"
d_wm = Application("d_wm", cmd)
d_wm.start()
def start_port_forwarder() -> None:
import socket
local_ip = socket.gethostbyname(socket.gethostname())
cmd = f"/usr/bin/socat tcp-listen:5554,bind={local_ip},fork tcp:127.0.0.1:5554 & " \
f"/usr/bin/socat tcp-listen:5555,bind={local_ip},fork tcp:127.0.0.1:5555"
pf = Application("port_forwarder", cmd)
pf.start()
def start_vnc_server() -> None:
cmd = "/usr/bin/x11vnc"
vnc_pass = os.getenv(ENV.VNC_PASSWORD)
if vnc_pass:
pass_path = os.path.join(os.getenv(ENV.WORK_PATH), ".vncpass")
subprocess.check_call(f"{cmd} -storepasswd {vnc_pass} {pass_path}", shell=True)
last_arg = f"-rfbauth {pass_path}"
else:
last_arg = "-nopw"
display = os.getenv(ENV.DISPLAY)
args = f"-display {display} -forever -shared {last_arg}"
vnc_server = Application("vnc_web", cmd, args, False)
vnc_server.start()
def start_vnc_web() -> None:
if convert_str_to_bool(os.getenv(ENV.WEB_VNC)):
vnc_port = get_env_value_or_raise(ENV.VNC_PORT)
vnc_web_port = get_env_value_or_raise(ENV.WEB_VNC_PORT)
cmd = "/opt/noVNC/utils/novnc_proxy"
args = f"--vnc localhost:{vnc_port} localhost:{vnc_web_port}"
vnc_web = Application("vnc_web", cmd, args, False)
vnc_web.start()
else:
logger.info("env WEB_VNC cannot be found, VNC_WEB is not started!")
@cli.command()
@click.argument("app", type=click.Choice([app.value for app in Application.App]))
def start(app):
selected_app = str(app).lower()
if selected_app == Application.App.APPIUM.value.lower():
start_appium()
elif selected_app == Application.App.DEVICE.value.lower():
start_device()
elif selected_app == Application.App.DISPLAY_SCREEN.value.lower():
start_display_screen()
elif selected_app == Application.App.DISPLAY_WM.value.lower():
start_display_wm()
elif selected_app == Application.App.PORT_FORWARDER.value.lower():
start_port_forwarder()
elif selected_app == Application.App.VNC_SERVER.value.lower():
start_vnc_server()
elif selected_app == Application.App.VNC_WEB.value.lower():
start_vnc_web()
else:
logger.error(f"application '{selected_app}' is not supported!")
class SharedComponent(Enum):
LOG = "log"
def shared_log() -> None:
if convert_str_to_bool(os.getenv(ENV.WEB_LOG)):
from http.server import BaseHTTPRequestHandler, HTTPServer
log_path = get_env_value_or_raise(ENV.LOG_PATH)
log_port = int(get_env_value_or_raise(ENV.WEB_LOG_PORT))
logger.info(f"Shared log is enabled! all logs can be found on port '{log_port}'")
class LogSharedHandler(BaseHTTPRequestHandler):
def do_GET(self):
# root path
if self.path == "/":
html = "<html><body>"
for f in os.listdir(log_path):
html += f"<p><a href=\"{f}\">{f}</a></p>"
html += "</body></html>"
self.send_response(200)
self.send_header("Content-type", "text/html")
self.end_headers()
self.wfile.write(html.encode())
# open each selected log file
else:
p = log_path + self.path
try:
with open(p, "rb") as file:
self.send_response(200)
self.send_header("Content-type", "text/plain")
self.end_headers()
self.wfile.write(file.read())
except FileNotFoundError:
self.send_error(404, "File not found")
httpd = HTTPServer(('0.0.0.0', log_port), LogSharedHandler)
httpd.serve_forever()
else:
logger.info(f"Shared log is disabled! nothing to do!")
@cli.command()
@click.argument("component", type=click.Choice([component.value for component in SharedComponent]))
def share(component):
selected_component = str(component).lower()
if selected_component == SharedComponent.LOG.value.lower():
shared_log()
else:
logger.error(f"component '{component}' is not supported!")
if __name__ == '__main__':
cli()
+35
View File
@@ -0,0 +1,35 @@
import logging
import subprocess
from enum import Enum
class Application:
class App(Enum):
APPIUM = "appium"
DEVICE = "device"
DISPLAY_SCREEN = "display_screen"
DISPLAY_WM = "display_wm"
PORT_FORWARDER = "port_forwarder"
VNC_SERVER = "vnc_server"
VNC_WEB = "vnc_web"
def __init__(self, name: str, command: str, additional_args: str = "", ui: bool = False) -> None:
self.logger = logging.getLogger(self.__class__.__name__)
self.name = name
self.command = command
self.additional_args = additional_args
self.ui = ui
def start(self) -> None:
if self.ui:
self.logger.info(f"{self.name} will be started with ui!")
subprocess.check_call(f"/usr/bin/xterm -T {self.name} -n {self.name} "
f"-e '{self.command} {self.additional_args}'", shell=True)
else:
self.logger.info(f"{self.name} will be started without ui!")
subprocess.check_call(f"{self.command} {self.additional_args}", shell=True)
def __repr__(self) -> str:
return "Application(name={n}, command={c}, args={args}, ui={ui})".format(
n=self.name, c=self.command, args=self.additional_args, ui=self.ui)
+6
View File
@@ -0,0 +1,6 @@
# Status
STATUS_CREATING = "CREATING"
STATUS_STARTING = "STARTING"
STATUS_BOOTING = "BOOTING"
STATUS_RECONFIGURING = "RECONFIGURING"
STATUS_READY = "READY"
+47
View File
@@ -0,0 +1,47 @@
# General
DOCKER_ANDROID_VERSION = "DOCKER_ANDROID_VERSION"
USER_BEHAVIOR_ANALYTICS = "USER_BEHAVIOR_ANALYTICS"
APPIUM = "APPIUM"
APPIUM_ADDITIONAL_ARGS = "APPIUM_ADDITIONAL_ARGS"
DISPLAY = "DISPLAY"
SCREEN_DEPTH = "SCREEN_DEPTH"
SCREEN_HEIGHT = "SCREEN_HEIGHT"
SCREEN_NUMBER = "SCREEN_NUMBER"
SCREEN_WIDTH = "SCREEN_WIDTH"
VNC_PASSWORD = "VNC_PASSWORD"
VNC_PORT = "VNC_PORT"
WEB_VNC_PORT = "WEB_VNC_PORT"
WEB_VNC = "WEB_VNC"
WORK_PATH = "WORK_PATH"
LOG_PATH = "LOG_PATH"
WEB_LOG_PORT = "WEB_LOG_PORT"
WEB_LOG = "WEB_LOG"
# Device
DEVICE_INTERVAL_WAITING = "DEVICE_INTERVAL_WAITING"
DEVICE_TYPE = "DEVICE_TYPE"
# Device (Emulator)
EMULATOR_ADDITIONAL_ARGS = "EMULATOR_ADDITIONAL_ARGS"
EMULATOR_ANDROID_VERSION = "EMULATOR_ANDROID_VERSION"
EMULATOR_DATA_PARTITION = "EMULATOR_DATA_PARTITION"
EMULATOR_DEVICE = "EMULATOR_DEVICE"
EMULATOR_IMG_TYPE = "EMULATOR_IMG_TYPE"
EMULATOR_NAME = "EMULATOR_NAME"
EMULATOR_NO_SKIN = "EMULATOR_NO_SKIN"
EMULATOR_SYS_IMG = "EMULATOR_SYS_IMG"
EMULATOR_CONFIG_PATH = "EMULATOR_CONFIG_PATH"
# Device (Genymotion - General)
GENYMOTION_TEMPLATE_PATH = "GENYMOTION_TEMPLATE_PATH"
# Device (Geny_SAAS)
GENY_SAAS_USER = "GENY_SAAS_USER"
GENY_SAAS_PASS = "GENY_SAAS_PASS"
GENY_AUTH_TOKEN = "GENY_AUTH_TOKEN"
GENY_SAAS_TEMPLATE_FILE_NAME = "saas.json"
# Device (Geny_AWS)
AWS_ACCESS_KEY_ID = "AWS_ACCESS_KEY_ID"
AWS_SECRET_ACCESS_KEY = "AWS_SECRET_ACCESS_KEY"
GENY_AWS_TEMPLATE_FILE_NAME = "aws.json"
+1
View File
@@ -0,0 +1 @@
UTF8 = "utf-8"
+172
View File
@@ -0,0 +1,172 @@
import json
import logging
import os
import platform
import requests
import signal
import time
from abc import ABC, abstractmethod
from enum import Enum
from helper import convert_str_to_bool, get_env_value_or_raise
from constants import DEVICE, ENV
class DeviceType(Enum):
EMULATOR = "emulator"
GENY_SAAS = "geny_saas"
GENY_AWS = "geny_aws"
class Device(ABC):
FORM_ID = "1FAIpQLSdrKWQdMh6Nt8v8NQdYvTIntohebAgqWCpXT3T9NofAoxcpkw"
FORM_USER = "user"
FORM_CITY = "city"
FORM_REGION = "region"
FORM_COUNTRY = "country"
FORM_APP_VERSION = "app_version"
FORM_APPIUM = "appium"
FORM_APPIUM_ADDITIONAL_ARGS = "appium_additional_args"
FORM_WEB_LOG = "web_log"
FORM_WEB_VNC = "web_vnc"
FORM_SCREEN_RESOLUTION = "screen_resolution"
FORM_DEVICE_TYPE = "device_type"
FORM_EMU_DEVICE = "emu_device"
FORM_EMU_ANDROID_VERSION = "emu_android_version"
FORM_EMU_NO_SKIN = "emu_no_skin"
FORM_EMU_DATA_PARTITION = "emu_data_partition"
FORM_EMU_ADDITIONAL_ARGS = "emu_additional_args"
def __init__(self) -> None:
self.logger = logging.getLogger(self.__class__.__name__)
self.device_type = None
self.interval_waiting = int(os.getenv(ENV.DEVICE_INTERVAL_WAITING, 2))
self.user_behavior_analytics = convert_str_to_bool(os.getenv(ENV.USER_BEHAVIOR_ANALYTICS, "true"))
self.form_field = {
Device.FORM_USER: "entry.108751316",
Device.FORM_CITY: "entry.2083022547",
Device.FORM_REGION: "entry.1083141079",
Device.FORM_COUNTRY: "entry.1946159560",
Device.FORM_APP_VERSION: "entry.818050927",
Device.FORM_APPIUM: "entry.181610571",
Device.FORM_APPIUM_ADDITIONAL_ARGS: "entry.727759656",
Device.FORM_WEB_LOG: "entry.1225589007",
Device.FORM_WEB_VNC: "entry.2055392048",
Device.FORM_SCREEN_RESOLUTION: "entry.709976626",
Device.FORM_DEVICE_TYPE: "entry.207096546",
Device.FORM_EMU_DEVICE: "entry.1960740382",
Device.FORM_EMU_ANDROID_VERSION: "entry.671872491",
Device.FORM_EMU_NO_SKIN: "entry.403556951",
Device.FORM_EMU_DATA_PARTITION: "entry.1052258875",
Device.FORM_EMU_ADDITIONAL_ARGS: "entry.57529972"
}
self.form_data = {}
signal.signal(signal.SIGTERM, self.tear_down)
def set_status(self, current_status) -> None:
bashrc_file = f"{os.getenv(ENV.WORK_PATH)}/device_status"
with open(bashrc_file, "w+") as bf:
bf.write(current_status)
# It won't work using docker exec
# os.environ[constants.ENV_DEVICE_STATUS] = current_status
def _prepare_analytics_payload(self) -> None:
self.form_data.update({
self.form_field[Device.FORM_USER]: f"{platform.platform()}_{platform.version().replace(' ', '_')}",
self.form_field[Device.FORM_APP_VERSION]: os.getenv(ENV.DOCKER_ANDROID_VERSION),
self.form_field[Device.FORM_DEVICE_TYPE]: self.device_type,
self.form_field[Device.FORM_WEB_VNC]: convert_str_to_bool(os.getenv(ENV.WEB_VNC)),
self.form_field[Device.FORM_WEB_LOG]: convert_str_to_bool(os.getenv(ENV.WEB_LOG)),
self.form_field[Device.FORM_APPIUM]: convert_str_to_bool(os.getenv(ENV.APPIUM))
})
try:
res = requests.get("https://ipinfo.io")
if res.ok:
json_res = res.json()
self.form_data.update({
self.form_field[Device.FORM_CITY]: json_res[Device.FORM_CITY],
self.form_field[Device.FORM_REGION]: json_res[Device.FORM_REGION],
self.form_field[Device.FORM_COUNTRY]: json_res[Device.FORM_COUNTRY]
})
except requests.exceptions.RequestException as rer:
self.logger.warning(rer)
pass
except KeyError as ke:
self.logger.warning(ke)
pass
def create(self) -> None:
if self.user_behavior_analytics:
self.logger.info("Sending user behavior analytics to improve the tool")
try:
form_url = f"https://docs.google.com/forms/d/e/{Device.FORM_ID}/formResponse"
self._prepare_analytics_payload()
requests.post(url=form_url, data=self.form_data)
except requests.exceptions.RequestException as rer:
self.logger.warning(rer)
pass
self.set_status(DEVICE.STATUS_CREATING)
def start(self) -> None:
self.set_status(DEVICE.STATUS_STARTING)
def wait_until_ready(self) -> None:
self.set_status(DEVICE.STATUS_BOOTING)
def reconfigure(self) -> None:
self.set_status(DEVICE.STATUS_RECONFIGURING)
def keep_alive(self) -> None:
self.set_status(DEVICE.STATUS_READY)
self.logger.warning(f"{self.device_type} process will be kept alive to be able to get sigterm signal...")
while True:
time.sleep(2)
@abstractmethod
def tear_down(self, *args) -> None:
pass
class Genymotion(Device):
def __init__(self) -> None:
super().__init__()
self.logger = logging.getLogger(self.__class__.__name__)
def get_data_from_template(self, filename: str) -> dict:
path_template_json = os.path.join(get_env_value_or_raise(ENV.GENYMOTION_TEMPLATE_PATH), filename)
data = {}
if os.path.isfile(path_template_json):
try:
self.logger.info(path_template_json)
with open(path_template_json, "r") as f:
data = json.load(f)
except FileNotFoundError as fnf:
self.shutdown_and_logout()
self.logger.error(f"File cannot be found: {fnf}")
except json.JSONDecodeError as jde:
self.shutdown_and_logout()
self.logger.error(f"Error Decoding Json: {jde}")
except Exception as e:
self.shutdown_and_logout()
self.logger.error(e)
else:
self.shutdown_and_logout()
raise RuntimeError(f"'{path_template_json}' cannot be found!")
return data
@abstractmethod
def login(self) -> None:
pass
def create(self) -> None:
super().create()
self.login()
@abstractmethod
def shutdown_and_logout(self) -> None:
pass
def tear_down(self, *args) -> None:
self.shutdown_and_logout()
+264
View File
@@ -0,0 +1,264 @@
import logging
import os
import subprocess
import time
from enum import Enum
from device import Device, DeviceType
from helper import convert_str_to_bool, get_env_value_or_raise, symlink_force
from constants import ENV, UTF8
class Emulator(Device):
DEVICE = (
"Nexus 4",
"Nexus 5",
"Nexus 7",
"Nexus One",
"Nexus S",
"Samsung Galaxy S6",
"Samsung Galaxy S7",
"Samsung Galaxy S7 Edge",
"Samsung Galaxy S8",
"Samsung Galaxy S9",
"Samsung Galaxy S10",
"Pixel C"
)
API_LEVEL = {
"9.0": "28",
"10.0": "29",
"11.0": "30",
"12.0": "32",
"13.0": "33",
"14.0": "34"
}
adb_name_id = 5554
class ReadinessCheck(Enum):
BOOTED = "booted"
RUN_STATE = "in running state"
WELCOME_SCREEN = "in welcome screen"
POP_UP_WINDOW = "pop up window"
def __init__(self, name: str, device: str, android_version: str, data_partition: str,
additional_args: str, img_type: str, sys_img: str) -> None:
super().__init__()
self.logger = logging.getLogger(self.__class__.__name__)
self.adb_name = f"emulator-{Emulator.adb_name_id}"
self.device_type = DeviceType.EMULATOR.value
self.name = name
if device in self.DEVICE:
self.device = device
else:
raise RuntimeError(f"device '{device}' is not supported!")
if android_version in self.API_LEVEL.keys():
self.android_version = android_version
else:
raise RuntimeError(f"android version '{android_version}' is not supported!")
self.api_level = self.API_LEVEL[self.android_version]
self.data_partition = data_partition
self.additional_args = additional_args
self.img_type = img_type
self.sys_img = sys_img
workdir = get_env_value_or_raise(ENV.WORK_PATH)
self.path_device_profile_target = os.path.join(workdir, ".android", "devices.xml")
self.path_emulator = os.path.join(workdir, "emulator")
self.path_emulator_config = os.path.join(workdir, "emulator", "config.ini")
self.path_emulator_profiles = os.path.join(workdir, "docker-android", "mixins",
"configs", "devices", "profiles")
self.path_emulator_skins = os.path.join(workdir, "docker-android", "mixins",
"configs", "devices", "skins")
self.file_name = self.device.replace(" ", "_").lower()
self.no_skin = convert_str_to_bool(os.getenv(ENV.EMULATOR_NO_SKIN))
self.interval_after_booting = 15
Emulator.adb_name_id += 2
self.form_data.update({
self.form_field[Device.FORM_SCREEN_RESOLUTION]: f"{os.getenv(ENV.SCREEN_WIDTH)}x"
f"{os.getenv(ENV.SCREEN_HEIGHT)}x"
f"{os.getenv(ENV.SCREEN_DEPTH)}",
self.form_field[Device.FORM_EMU_DEVICE]: self.device,
self.form_field[Device.FORM_EMU_ANDROID_VERSION]: self.android_version,
self.form_field[Device.FORM_EMU_NO_SKIN]: self.no_skin,
self.form_field[Device.FORM_EMU_DATA_PARTITION]: self.data_partition,
self.form_field[Device.FORM_EMU_ADDITIONAL_ARGS]: self.additional_args
})
def is_initialized(self) -> bool:
import re
if os.path.exists(self.path_emulator_config):
self.logger.info("Config file exists")
with open(self.path_emulator_config, 'r') as f:
if any(re.match(r'hw\.device\.name ?= ?{}'.format(self.device), line) for line in f):
self.logger.info("Selected device is already created")
return True
else:
self.logger.info("Selected device is not created")
return False
self.logger.info("Config file does not exist")
return False
def _add_profile(self) -> None:
if "samsung" in self.device.lower():
path_device_profile_source = os.path.join(self.path_emulator_profiles,
"{fn}.xml".format(fn=self.file_name))
symlink_force(path_device_profile_source, self.path_device_profile_target)
self.logger.info("Samsung device profile is linked")
def _use_override_config(self) -> None:
override_confg_path = os.getenv(ENV.EMULATOR_CONFIG_PATH)
if override_confg_path is None:
self.logger.info(f"The environment variable 'EMULATOR_CONFIG_PATH' is not set")
return
self.logger.info(f"Environment variable 'EMULATOR_CONFIG_PATH' found: {override_confg_path}")
if not os.path.isfile(override_confg_path):
self.logger.warning(f"Source file '{override_confg_path}' does not exist.")
return
if not os.access(override_confg_path, os.R_OK):
self.logger.warning(f"Source file '{override_confg_path}' is not readable.")
return
try:
with open(override_confg_path, 'r') as src, open(self.path_emulator_config, 'a') as dst:
dst.write(src.read())
self.logger.info(f"Content from '{override_confg_path}' successfully appended to '{self.path_emulator_config}'.")
except Exception as e:
self.logger.error(f"An error occurred while copying file content: {e}")
def _add_skin(self) -> None:
device_skin_path = os.path.join(
self.path_emulator_skins, "{fn}".format(fn=self.file_name))
with open(self.path_emulator_config, "a") as cf:
cf.write("hw.keyboard=yes\n")
cf.write("disk.dataPartition.size={dp}\n".format(dp=self.data_partition))
cf.write("skin.path={sp}\n".format(
sp="_no_skin" if self.no_skin else device_skin_path))
self.logger.info(f"Skin is added in: '{self.path_emulator_config}'")
def create(self) -> None:
super().create()
first_run = not self.is_initialized()
if first_run:
self.logger.info(f"Creating the {self.device_type}...")
self._add_profile()
creation_cmd = "avdmanager create avd -f -n {n} -b {it}/{si} " \
"-k 'system-images;android-{al};{it};{si}' " \
"-d {d} -p {pe}".format(n=self.name, it=self.img_type, si=self.sys_img,
al=self.api_level, d=self.device.replace(" ", "\ "),
pe=self.path_emulator)
self.logger.info(f"Command to create emulator: '{creation_cmd}'")
subprocess.check_call(creation_cmd, shell=True)
self._add_skin()
self._use_override_config()
self.logger.info(f"{self.device_type} is created!")
def change_permission(self) -> None:
kvm_path = "/dev/kvm"
if os.path.exists(kvm_path):
cmds = (f"sudo chown 1300:1301 {kvm_path}",
"sudo sed -i '1d' /etc/passwd")
for c in cmds:
subprocess.check_call(c, shell=True)
self.logger.info("KVM permission is granted!")
else:
raise RuntimeError("/dev/kvm cannot be found!")
def deploy(self):
self.logger.info(f"Deploying the {self.device_type}")
basic_cmd = "emulator @{n}".format(n=self.name)
basic_args = "-gpu swiftshader_indirect -accel on -writable-system -verbose"
wipe_arg = "-wipe-data" if not self.is_initialized() else ""
start_cmd = f"{basic_cmd} {basic_args} {wipe_arg} {self.additional_args}"
self.logger.info(f"Command to run {self.device_type}: '{start_cmd}'")
subprocess.Popen(start_cmd.split())
def start(self) -> None:
super().start()
self.change_permission()
self.deploy()
def check_adb_command(self, readiness_check_type: ReadinessCheck, bash_command: str,
expected_keyword: str, max_attempts: int, interval_waiting_time: int,
adb_action: str = None) -> None:
success = False
for _ in range(1, max_attempts):
if success:
break
else:
try:
output = subprocess.check_output(
bash_command.split()).decode(UTF8)
if expected_keyword in str(output).lower():
if readiness_check_type is self.ReadinessCheck.POP_UP_WINDOW:
subprocess.check_call(adb_action, shell=True)
else:
self.logger.info(
f"{self.device_type} is {readiness_check_type.value}!")
success = True
else:
self.logger.info(f"[attempt: {_}] {self.device_type} is not {readiness_check_type.value}! "
f"will check again in {interval_waiting_time} seconds")
time.sleep(interval_waiting_time)
except subprocess.CalledProcessError:
self.logger.warning("command cannot be executed! will continue...")
time.sleep(2)
continue
else:
if readiness_check_type is self.ReadinessCheck.POP_UP_WINDOW:
self.logger.info(f"Pop up windows '{expected_keyword}' is not found!")
else:
raise RuntimeError(
f"{readiness_check_type.value} is checked {_} times!")
def wait_until_ready(self) -> None:
super().wait_until_ready()
booting_cmd = f"adb -s {self.adb_name} wait-for-device shell getprop sys.boot_completed"
focus_cmd = f"adb -s {self.adb_name} shell dumpsys window | grep -i mCurrentFocus"
self.check_adb_command(self.ReadinessCheck.BOOTED,
booting_cmd, "1", 60, self.interval_waiting)
time.sleep(self.interval_after_booting)
interval_pop_up = 0
max_attempt_pop_up = 3
pop_up_system_ui = "Not Responding: com.android.systemui"
system_ui_cmd = f"adb shell su root 'kill $(pidof com.android.systemui)'"
pop_up_key_enter = {
"Not Responding: com.google.android.gms",
"Not Responding: system",
"ConversationListActivity"
}
key_enter_cmd = "adb shell input keyevent KEYCODE_ENTER"
self.check_adb_command(self.ReadinessCheck.POP_UP_WINDOW, focus_cmd, pop_up_system_ui,
max_attempt_pop_up, interval_pop_up, system_ui_cmd)
for pe in pop_up_key_enter:
self.check_adb_command(self.ReadinessCheck.POP_UP_WINDOW, focus_cmd, pe, max_attempt_pop_up,
interval_pop_up, key_enter_cmd)
self.check_adb_command(self.ReadinessCheck.WELCOME_SCREEN,
focus_cmd, "launcheractivity", 60, self.interval_waiting)
self.logger.info(f"{self.device_type} is ready to use")
def tear_down(self, *args) -> None:
self.logger.warning("Sigterm is detected! Nothing to do!")
def __repr__(self) -> str:
try:
return "Emulator(name={n}, device={d}, adb_name={an}, android_version={av}, api_level={al}, " \
"data_partition={dp}, additional_args={aa}, img_type={it}, sys_img={si}, " \
"path_device_profile_target={pdpt}, path_emulator={pe}, path_emulator_config={pec}, " \
"file={f})".format(n=self.name, d=self.device, an=self.adb_name, av=self.android_version,
al=self.api_level, dp=self.data_partition, aa=self.additional_args,
it=self.img_type, si=self.sys_img, pdpt=self.path_device_profile_target,
pe=self.path_emulator, pec=self.path_emulator_config, f=self.file_name)
except AttributeError as ae:
self.logger.error(ae)
return ""
+223
View File
@@ -0,0 +1,223 @@
import json
import logging
import os
import shutil
import subprocess
import time
from device import Genymotion, DeviceType
from helper import get_env_value_or_raise
from constants import ENV, UTF8
class GenyAWS(Genymotion):
port = 5555
def __init__(self) -> None:
super().__init__()
self.logger = logging.getLogger(self.__class__.__name__)
self.device_type = DeviceType.GENY_AWS.value
self.workdir = get_env_value_or_raise(ENV.WORK_PATH)
self.aws_credentials_path = os.path.join(self.workdir, ".aws")
self.remove_cred_at_the_end = False # for logout
self.geny_aws_template_path = os.path.join(self.workdir, "docker-android", "mixins",
"templates", "genymotion", "aws")
self.created_devices = {}
def login(self) -> None:
aws_credentials_file = os.path.join(self.aws_credentials_path, "credentials")
if os.path.exists(self.aws_credentials_path):
self.logger.info(".aws is found! It will be used as credentials")
else:
self.logger.info(".aws cannot be found! the template will be used!")
self.remove_cred_at_the_end = True
aws_credentials_template_path = os.path.join(self.geny_aws_template_path, ".aws")
shutil.move(aws_credentials_template_path, self.aws_credentials_path)
aws_key_id = get_env_value_or_raise(ENV.AWS_ACCESS_KEY_ID)
aws_secret_key = get_env_value_or_raise(ENV.AWS_SECRET_ACCESS_KEY)
replacements_cred = {
f"<{ENV.AWS_ACCESS_KEY_ID.lower()}>": aws_key_id,
f"<{ENV.AWS_SECRET_ACCESS_KEY.lower()}>": aws_secret_key
}
with open(aws_credentials_file, 'r+') as cred_file:
cred_file_contents = cred_file.read()
for old_str, new_str in replacements_cred.items():
cred_file_contents = cred_file_contents.replace(old_str, new_str)
cred_file.seek(0)
cred_file.write(cred_file_contents)
cred_file.truncate()
self.logger.info("aws credentials is set!")
def create_ssh_key(self) -> None:
subprocess.check_call('ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""', shell=True)
self.logger.info("ssh key is created!")
def create_tf_files(self) -> None:
try:
for item in self.get_data_from_template(ENV.GENY_AWS_TEMPLATE_FILE_NAME):
name = item["name"]
region = item["region"]
ami = item["ami"]
instance_type = item["instance_type"]
if "security_group" in item:
sg = item["security_group"]
tf_content = f'''
provider "aws" {{
alias = "provider_{name}"
region = "{region}"
}}
resource "aws_key_pair" "geny_key_{name}" {{
provider = aws.provider_{name}
public_key = file("~/.ssh/id_rsa.pub")
}}
resource "aws_instance" "geny_aws_{name}" {{
provider = aws.provider_{name}
ami = "{ami}"
instance_type = "{instance_type}"
vpc_security_group_ids = ["{sg}"]
key_name = aws_key_pair.geny_key_{name}.key_name
tags = {{
Name = "DockerAndroid-GenyAWS-{ami}.id}}"
}}
provisioner "remote-exec" {{
connection {{
type = "ssh"
user = "shell"
host = self.public_ip
private_key = file("~/.ssh/id_rsa")
}}
script = "/home/androidusr/docker-android/mixins/scripts/genymotion/aws/enable_adb.sh"
}}
}}
output "public_dns_{name}" {{
value = aws_instance.geny_aws_{name}.public_dns
}}
'''
else:
ingress_rules = json.dumps(item["ingress_rules"])
egress_rules = json.dumps(item["egress_rules"])
tf_content = f'''
locals {{
ingress_rules = {ingress_rules}
egress_rules = {egress_rules}
}}
provider "aws" {{
alias = "provider_{name}"
region = "{region}"
}}
resource "aws_security_group" "geny_sg_{name}" {{
provider = aws.provider_{name}
dynamic "ingress" {{
for_each = local.ingress_rules
content {{
from_port = ingress.value.from_port
to_port = ingress.value.to_port
protocol = ingress.value.protocol
cidr_blocks = ingress.value.cidr_blocks
}}
}}
dynamic "egress" {{
for_each = local.egress_rules
content {{
from_port = egress.value.from_port
to_port = egress.value.to_port
protocol = egress.value.protocol
cidr_blocks = egress.value.cidr_blocks
}}
}}
}}
resource "aws_key_pair" "geny_key_{name}" {{
provider = aws.provider_{name}
public_key = file("~/.ssh/id_rsa.pub")
}}
resource "aws_instance" "geny_aws_{name}" {{
provider = aws.provider_{name}
ami = "{ami}"
instance_type = "{instance_type}"
vpc_security_group_ids = [aws_security_group.geny_sg_{name}.name]
key_name = aws_key_pair.geny_key_{name}.key_name
tags = {{
Name = "DockerAndroid-GenyAWS-{ami}.id}}"
}}
provisioner "remote-exec" {{
connection {{
type = "ssh"
user = "shell"
host = self.public_ip
private_key = file("~/.ssh/id_rsa")
}}
script = "/home/androidusr/docker-android/mixins/scripts/genymotion/aws/enable_adb.sh"
}}
}}
output "public_dns_{name}" {{
value = aws_instance.geny_aws_{name}.public_dns
}}
'''
tf_deployment_filename = f"{name}.tf"
self.created_devices[name] = GenyAWS.port
GenyAWS.port += 1
with open(tf_deployment_filename, "w") as df:
df.write(tf_content)
self.logger.info("Terraform files are created!")
except Exception as e:
self.logger.error(e)
self.shutdown_and_logout()
def deploy_tf(self) -> None:
try:
cmds = (
"terraform init",
"terraform plan",
"terraform apply -auto-approve"
)
for c in cmds:
subprocess.check_call(c, shell=True)
self.logger.info("Genymotion-Device(s) are deployed on AWS")
except subprocess.CalledProcessError as cpe:
self.logger.error(cpe)
self.shutdown_and_logout()
def connect_with_local_adb(self) -> None:
self.logger.info(f"created devices: {self.created_devices}")
try:
for d, p in self.created_devices.items():
dns_cmd = f"terraform output public_dns_{d}"
dns_ip = subprocess.check_output(dns_cmd.split()).decode(UTF8).replace('"', '')
tunnel_cmd = f"ssh -i ~/.ssh/id_rsa -o ServerAliveInterval=60 -o StrictHostKeyChecking=no -q -NL " \
f"{p}:localhost:5555 shell@{dns_ip}"
subprocess.Popen(tunnel_cmd.split())
time.sleep(10)
subprocess.check_call(f"adb connect localhost:{p} >/dev/null 2>&1", shell=True)
except Exception as e:
self.logger.error(e)
self.shutdown_and_logout()
def create(self) -> None:
super().create()
self.create_ssh_key()
self.create_tf_files()
self.deploy_tf()
self.connect_with_local_adb()
def shutdown_and_logout(self) -> None:
try:
subprocess.check_call("terraform destroy -auto-approve -lock=false", shell=True)
self.logger.info("device(s) is successfully removed!")
except subprocess.CalledProcessError as cpe:
self.logger.error(cpe)
finally:
if self.remove_cred_at_the_end:
subprocess.check_call(f"rm -rf {self.aws_credentials_path}", shell=True)
self.logger.info("successfully logged out!")
+141
View File
@@ -0,0 +1,141 @@
import logging
import os
import subprocess
import concurrent.futures
import uuid
from device import Genymotion, DeviceType
from helper import get_env_value_or_raise
from constants import ENV, UTF8
class GenySAAS(Genymotion):
def __init__(self) -> None:
super().__init__()
self.logger = logging.getLogger(self.__class__.__name__)
self.device_type = DeviceType.GENY_SAAS.value
self.created_devices = []
def login(self) -> None:
if os.getenv(ENV.GENY_AUTH_TOKEN):
auth_token = get_env_value_or_raise(ENV.GENY_AUTH_TOKEN)
subprocess.check_call(f"gmsaas auth token {auth_token} > /dev/null 2>&1", shell=True)
else:
user = get_env_value_or_raise(ENV.GENY_SAAS_USER)
password = get_env_value_or_raise(ENV.GENY_SAAS_PASS)
subprocess.check_call(f"gmsaas auth login {user} {password} > /dev/null 2>&1", shell=True)
self.logger.info("successfully logged in!")
def create(self) -> None:
super().create()
# Collect all items first
items = []
for item in self.get_data_from_template(ENV.GENY_SAAS_TEMPLATE_FILE_NAME):
name = ""
template = ""
local_port = ""
# implement like this because local_port param is not a must
for k, v in item.items():
if k.lower() == "name":
name = v
elif k.lower() == "template":
template = v
elif k.lower() == "local_port":
local_port = v
else:
self.logger.warning(f"'{k}' is not supported! Please check the documentation!")
if not name:
name = str(uuid.uuid4())
if not template:
self.shutdown_and_logout()
raise RuntimeError(f"'template' is a must parameter and not given!")
items.append({
'name': name,
'template': template,
'local_port': local_port
})
# Start all devices in parallel
with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
try:
# Submit all tasks
future_to_item = {executor.submit(self.create_instance, item): item for item in items}
# Collect results as they complete
for future in concurrent.futures.as_completed(future_to_item):
item = future_to_item[future]
try:
created_device = future.result()
self.created_devices.append(created_device)
self.logger.info(f"Successfully created device: {created_device}")
except Exception as e:
self.logger.error(f"Instance creation failed for {item['name']}: {e}")
self.shutdown_and_logout()
exit(1)
except Exception as e:
self.shutdown_and_logout()
self.logger.error(f"Parallel execution failed: {e}")
exit(1)
def create_instance(self, item_data):
"""Create a single instance and return the result"""
name = item_data['name']
template = item_data['template']
local_port = item_data['local_port']
self.logger.info(f"name: {name}, template: {template}")
creation_cmd = f"gmsaas instances start {template} {name}"
try:
instance_id = subprocess.check_output(creation_cmd.split()).decode(UTF8).replace("\n", "")
# Connect to ADB
additional_args = ""
if local_port:
additional_args = f"--adb-serial-port {local_port}"
connect_cmd = f"gmsaas instances adbconnect {instance_id} {additional_args}"
subprocess.check_call(f"{connect_cmd}", shell=True)
return {f"{name}": instance_id}
except Exception as e:
self.logger.error(f"Failed to create instance {name}: {e}")
raise e
def stop_instance(self, device_info):
"""Stop a single instance"""
for name, instance_id in device_info.items():
try:
subprocess.check_call(f"gmsaas instances stop {instance_id}", shell=True)
self.logger.info(f"device '{name}' is successfully removed!")
return True
except Exception as e:
self.logger.error(f"Failed to stop device '{name}': {e}")
return False
def shutdown_and_logout(self) -> None:
if bool(self.created_devices):
self.logger.info("Created device(s) will be removed!")
# Stop all devices in parallel
with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
# Submit all stop tasks
futures = [executor.submit(self.stop_instance, device) for device in self.created_devices]
# Wait for all to complete
for future in concurrent.futures.as_completed(futures):
try:
future.result()
except Exception as e:
self.logger.error(f"Error during device shutdown: {e}")
# Logout after all devices are stopped
if os.getenv(ENV.GENY_AUTH_TOKEN):
subprocess.check_call("gmsaas auth reset", shell=True)
else:
subprocess.check_call("gmsaas auth logout", shell=True)
self.logger.info("successfully logged out!")
+56
View File
@@ -0,0 +1,56 @@
import logging
import os
logger = logging.getLogger("helper")
def convert_str_to_bool(given_str: str) -> bool:
"""
Convert String to Boolean value
:param given_str: given string
:return: converted string in Boolean
"""
if given_str:
if type(given_str) is str:
return given_str.lower() in ("yes", "true", "t", "1")
else:
raise AttributeError
else:
logger.info(f"'{given_str}' is empty!")
return False
def get_env_value_or_raise(env_key: str) -> str:
"""
Get value of necessary environment variable.
:param env_key: given environment variable
:return: env_value in String
"""
try:
env_value = os.getenv(env_key)
if not env_value:
raise RuntimeError(f"'{env_key}' is missing.")
elif env_value.isspace():
raise RuntimeError(f"'{env_key}' contains only white space.")
return env_value
except TypeError as t_err:
logger.error(t_err)
def symlink_force(source: str, target: str) -> None:
"""
Create Symbolic link
:param source: source file
:param target: target file
:return: None
"""
try:
os.symlink(source, target)
except FileNotFoundError as ffe_err:
logger.error(ffe_err)
except FileExistsError:
os.remove(target)
os.symlink(source, target)
+3
View File
@@ -0,0 +1,3 @@
import os
LOGGING_FILE = os.path.join(os.path.dirname(__file__), 'logging.conf')
+1 -3
View File
@@ -1,9 +1,7 @@
import logging
import logging.config
from src import LOGGING_FILE
from logger import LOGGING_FILE
def init():
"""Init log."""
logging.config.fileConfig(LOGGING_FILE)
@@ -1,5 +1,5 @@
[loggers]
keys=root, app
keys=root
[handlers]
keys=console
@@ -11,16 +11,11 @@ keys=formatter
level=INFO
handlers=console
[logger_app]
level=INFO
handlers=console
propagate=0
qualname=app
[handler_console]
class=StreamHandler
formatter=formatter
args=(sys.stdout,)
[formatter_formatter]
format=[%(process)2d] [%(levelname)5s] %(name)s - %(message)s
format=%(asctime)s %(levelname)s %(name)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S
+9
View File
@@ -0,0 +1,9 @@
from unittest import TestCase
class BaseTest(TestCase):
def setUp(self) -> None:
pass
def tearDown(self) -> None:
pass
+21
View File
@@ -0,0 +1,21 @@
import os
from constants import ENV
from tests import BaseTest
class BaseDeviceTest(BaseTest):
DEVICE_ENVS = {
ENV.WORK_PATH: "/home/androidusr",
ENV.USER_BEHAVIOR_ANALYTICS: str(False),
ENV.EMULATOR_NO_SKIN: str(False)
}
def setUp(self) -> None:
for k, v in self.DEVICE_ENVS.items():
os.environ[k] = v
def tearDown(self) -> None:
for k in self.DEVICE_ENVS.keys():
if os.environ[k]:
del os.environ[k]
+8
View File
@@ -0,0 +1,8 @@
from device import Device
from tests.device import BaseDeviceTest
class TestDevice(BaseDeviceTest):
def test_create_device(self):
with self.assertRaises(TypeError):
Device()
+86
View File
@@ -0,0 +1,86 @@
import mock
from device.emulator import Emulator
from tests.device import BaseDeviceTest
class TestEmulator(BaseDeviceTest):
def setUp(self) -> None:
super().setUp()
self.name = "my_emu"
self.device = "Nexus 4"
self.a_version = "10.0"
self.d_partition = "550m"
self.additional_args = ""
self.i_type = "google_apis"
self.s_img = "x86"
self.emu = Emulator(self.name, self.device, self.a_version, self.d_partition,
self.additional_args, self.i_type, self.s_img)
def tearDown(self) -> None:
super().tearDown()
def test_adb_name(self):
my_emu = Emulator("my_other_emu", self.device, self.a_version, self.d_partition,
self.additional_args, self.i_type, self.s_img)
self.assertNotEqual(self.emu.adb_name, my_emu.adb_name)
def test_invalid_device(self):
with self.assertRaises(RuntimeError):
Emulator("my_other_emu", "unknown device", self.a_version, self.d_partition,
self.additional_args, self.i_type, self.s_img)
with self.assertRaises(RuntimeError):
Emulator("my_other_emu", "NEXUS 5", self.a_version, self.d_partition,
self.additional_args, self.i_type, self.s_img)
def test_invalid_android_version(self):
with self.assertRaises(RuntimeError):
Emulator("my_other_emu", self.device, "0.0", self.d_partition,
self.additional_args, self.i_type, self.s_img)
@mock.patch("os.path.exists", mock.MagicMock(return_value=False))
def test_initialisation_config_not_exist(self):
self.assertEqual(self.emu.is_initialized(), False)
@mock.patch("os.path.exists", mock.MagicMock(return_value=True))
@mock.patch("builtins.open", mock.mock_open(read_data=""))
def test_initialisation_device_not_exist(self):
self.assertEqual(self.emu.is_initialized(), False)
@mock.patch("os.path.exists", mock.MagicMock(return_value=True))
@mock.patch("builtins.open", mock.mock_open(read_data="hw.device.name=Nexus 4\n"))
def test_initialisation_device_exists(self):
self.assertEqual(self.emu.is_initialized(), True)
def test_check_adb_command(self):
with mock.patch("subprocess.check_output", mock.MagicMock(return_value="1".encode("utf-8"))):
self.emu.check_adb_command(
self.emu.ReadinessCheck.BOOTED, "mocked_command", "1", 3, 0)
def test_check_adb_command_out_of_attempts(self):
with mock.patch("subprocess.check_output", mock.MagicMock(return_value=" ".encode("utf-8"))):
with self.assertRaises(RuntimeError):
self.emu.check_adb_command(
self.emu.ReadinessCheck.BOOTED, "mocked_command", "1", 3, 0)
def test_use_override_config_no_env(self):
with mock.patch("os.getenv", return_value=None):
self.emu._use_override_config()
def test_use_override_config_file_not_exist(self):
with mock.patch("os.getenv", return_value="mock/path/to/config"):
with mock.patch("os.path.isfile", return_value=False):
self.emu._use_override_config()
def test_use_override_config_file_not_readable(self):
with mock.patch("os.getenv", return_value="mock/path/to/config"):
with mock.patch("os.path.isfile", return_value=True):
with mock.patch("os.access", return_value=False):
self.emu._use_override_config()
def test_use_override_config_malformed_content(self):
with mock.patch("os.getenv", return_value="mock/path/to/config"):
with mock.patch("os.path.isfile", return_value=True):
with mock.patch("os.access", return_value=True):
with mock.patch("builtins.open", mock.mock_open(read_data="malformed data")):
self.emu._use_override_config()
+69
View File
@@ -0,0 +1,69 @@
import os
import mock
from helper import convert_str_to_bool, get_env_value_or_raise, symlink_force
from tests import BaseTest
class TestHelperMethods(BaseTest):
def test_boolean_converter_with_valid_str(self):
self.assertEqual(convert_str_to_bool("TRUE"), True)
self.assertEqual(convert_str_to_bool("true"), True)
self.assertEqual(convert_str_to_bool("T"), True)
self.assertEqual(convert_str_to_bool("Yes"), True)
self.assertEqual(convert_str_to_bool("1"), True)
self.assertEqual(convert_str_to_bool("False"), False)
self.assertEqual(convert_str_to_bool("f"), False)
self.assertEqual(convert_str_to_bool("0"), False)
def test_boolean_converter_with_empty(self):
self.assertEqual(convert_str_to_bool(None), False)
self.assertEqual(convert_str_to_bool(""), False)
def test_boolean_converter_with_invalid_str(self):
self.assertEqual(convert_str_to_bool(" "), False)
self.assertEqual(convert_str_to_bool("test"), False)
def test_boolean_converter_with_invalid_format(self):
with self.assertRaises(AttributeError):
convert_str_to_bool(True)
def test_get_env_value_from_valid_key(self):
env_key = "env_key01"
os.environ[env_key] = "env_value01"
get_env_value_or_raise(env_key)
del os.environ[env_key]
def test_get_env_value_with_empty_string(self):
with self.assertRaises(RuntimeError):
env_key = "env_key01"
os.environ[env_key] = " "
get_env_value_or_raise(env_key)
del os.environ[env_key]
def test_get_env_value_from_invalid_key(self):
with self.assertRaises(RuntimeError):
get_env_value_or_raise("env_key02")
def test_symlink(self):
s = os.path.join("source.txt")
t = os.path.join("target_file.txt")
open(s, "a").close()
symlink_force(s, t)
os.remove(s)
os.remove(t)
def test_symlink_already_exist(self):
s = os.path.join("source.txt")
t = os.path.join("target_file.txt")
open(s, "a").close()
open(t, "a").close()
symlink_force(s, t)
os.remove(s)
os.remove(t)
def test_symlink_file_not_exists(self):
s = os.path.join("source.txt")
t = os.path.join("target_file.txt")
symlink_force(s, t)
os.remove(t)
+4
View File
@@ -0,0 +1,4 @@
# Ignore everything in this directory
*
# Except this file
!.gitignore
Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 720
height 1280
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1101
height 1709
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 192
y 213
}
}
landscape {
width 1847
height 886
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 304
y 788
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 557 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1600
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 2330
height 3136
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 366
y 266
}
}
landscape {
width 3340
height 2176
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 388
y 1866
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 511 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 806 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1080
height 1920
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1370
height 2446
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 147
y 233
}
}
landscape {
width 2497
height 1234
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 278
y 1143
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 820 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1440
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1896
height 3054
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 229
y 239
}
}
landscape {
width 3142
height 1639
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 318
y 1516
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 779 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 959 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1440
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1840
height 3251
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 195
y 329
}
}
landscape {
width 3427
height 1620
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 442
y 1511
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1001 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1536
height 2048
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 1978
height 2631
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 219
y 264
}
}
landscape {
width 2854
height 1785
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 401
y 1635
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 493 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

-59
View File
@@ -1,59 +0,0 @@
parts {
device {
display {
width 1800
height 2560
x 0
y 0
}
}
portrait {
background {
image port_back.png
}
onion {
image port_fore.png
}
}
landscape {
background {
image land_back.png
}
onion {
image land_fore.png
}
}
}
layouts {
portrait {
width 2307
height 2971
event EV_SW:0:1
part1 {
name portrait
x 0
y 0
}
part2 {
name device
x 259
y 181
}
}
landscape {
width 3096
height 2215
event EV_SW:0:0
part1 {
name landscape
x 0
y 0
}
part2 {
name device
x 269
y 1988
rotation 3
}
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

-3
View File
@@ -1,3 +0,0 @@
Sources:
1. Android Studio IDE
2. http://developer.samsung.com/technical-doc/view.do?v=T000000095
-60
View File
@@ -1,60 +0,0 @@
# Note: It requires docker-compose 1.13.0
#
# Usage: docker-compose up -d
version: "2.2"
services:
# Selenium hub
selenium_hub:
image: selenium/hub:3.4.0
ports:
- "4444:4444"
# Docker-Android for Android application testing
nexus_7.1.1:
image: butomo1989/docker-android-x86-7.1.1
privileged: true
# Change path of apk that you want to test. I use sample_apk that I provide in folder "example"
volumes:
- $PWD/example/sample_apk:/root/tmp
# Increase scale number if needed
scale: 1
ports:
- 6080
environment:
- DEVICE=Nexus 5
- CONNECT_TO_GRID=True
- APPIUM=true
- SELENIUM_HOST=selenium_hub
# Docker-Android for mobile website testing with chrome browser
# Chrome browser exists only for version 7.0 and 7.1.1
samsung_galaxy_web_7.1.1:
image: butomo1989/docker-android-x86-7.1.1
privileged: true
# Increase scale number if needed
scale: 1
ports:
- 6080
environment:
- DEVICE=Samsung Galaxy S6
- CONNECT_TO_GRID=True
- APPIUM=true
- SELENIUM_HOST=selenium_hub
- MOBILE_WEB_TEST=True
# Docker-Android for mobile website testing with default browser
# Default browser exists only for version 5.0.1, 5.1.1 and 6.0
samsung_galaxy_web_5.1.1:
image: butomo1989/docker-android-x86-5.1.1
privileged: true
# Increase scale number if needed
scale: 1
ports:
- 6080
environment:
- DEVICE=Samsung Galaxy S6
- CONNECT_TO_GRID=True
- APPIUM=true
- SELENIUM_HOST=selenium_hub
- MOBILE_WEB_TEST=True
-134
View File
@@ -1,134 +0,0 @@
FROM appium/appium:1.6.6-beta-p0
LABEL maintainer "Budi Utomo <budi.ut.1989@gmail.com>"
#=============
# Set WORKDIR
#=============
WORKDIR /root
#==================
# General Packages
#------------------
# xterm
# Terminal emulator
# supervisor
# Process manager
# socat
# Port forwarder
#------------------
# NoVNC Packages
#------------------
# x11vnc
# VNC server for X display
# openbox
# Windows manager
# menu
# Debian menu
# python-numpy
# Numpy, For faster performance: https://github.com/novnc/websockify/issues/77
# net-tools
# Netstat
#==================
RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends \
xterm \
supervisor \
socat \
x11vnc \
openbox \
menu \
python-numpy \
net-tools \
&& rm -rf /var/lib/apt/lists/*
#=======
# noVNC
# Use same commit id that docker-selenium uses
# https://github.com/elgalu/docker-selenium/blob/236b861177bd2917d864e52291114b1f5e4540d7/Dockerfile#L412-L413
#=======
ENV NOVNC_SHA="b403cb92fb8de82d04f305b4f14fa978003890d7" \
WEBSOCKIFY_SHA="558a6439f14b0d85a31145541745e25c255d576b"
RUN wget -nv -O noVNC.zip "https://github.com/kanaka/noVNC/archive/${NOVNC_SHA}.zip" \
&& unzip -x noVNC.zip \
&& rm noVNC.zip \
&& mv noVNC-${NOVNC_SHA} noVNC \
&& wget -nv -O websockify.zip "https://github.com/kanaka/websockify/archive/${WEBSOCKIFY_SHA}.zip" \
&& unzip -x websockify.zip \
&& mv websockify-${WEBSOCKIFY_SHA} ./noVNC/utils/websockify \
&& rm websockify.zip \
&& ln noVNC/vnc_auto.html noVNC/index.html
#======================
# Install SDK packages
#======================
ARG ANDROID_VERSION=5.0.1
ARG API_LEVEL=21
ARG PROCESSOR=x86
ARG SYS_IMG=x86_64
ARG IMG_TYPE=google_apis
ARG BROWSER=android
ENV ANDROID_VERSION=$ANDROID_VERSION \
API_LEVEL=$API_LEVEL \
PROCESSOR=$PROCESSOR \
SYS_IMG=$SYS_IMG \
IMG_TYPE=$IMG_TYPE \
BROWSER=$BROWSER
ENV PATH ${PATH}:${ANDROID_HOME}/build-tools
RUN rm ${ANDROID_HOME}/tools/emulator \
&& ln -s ${ANDROID_HOME}/tools/emulator64-${PROCESSOR} ${ANDROID_HOME}/tools/emulator
RUN echo y | android update sdk --no-ui -a -t android-${API_LEVEL},sys-img-${SYS_IMG}-${IMG_TYPE}-${API_LEVEL}
#==============================================
# Download chrome driver v2.26
# to be able to use chrome browser in emulator
# Issue: https://github.com/butomo1989/docker-android/commit/6406504f944dae73d0a0c5d8e71a17a47dff9b33
#==============================================
RUN wget -nv -O chrome.zip "https://chromedriver.storage.googleapis.com/2.26/chromedriver_linux64.zip" \
&& unzip -x chrome.zip \
&& rm chrome.zip
#================================================
# noVNC Default Configurations
# These Configurations can be changed through -e
#================================================
ENV DISPLAY=:0 \
SCREEN=0 \
SCREEN_WIDTH=1600 \
SCREEN_HEIGHT=900 \
SCREEN_DEPTH=16 \
LOCAL_PORT=5900 \
TARGET_PORT=6080 \
TIMEOUT=1 \
LOG_PATH=/var/log/supervisor
#===============
# Expose Ports
#---------------
# 4723
# Appium port
# 6080
# noVNC port
# 5554
# Emulator port
# 5555
# ADB connection port
#===============
EXPOSE 4723 6080 5554 5555
#======================
# Add Emulator Devices
#======================
COPY devices /root/devices
#===================
# Run docker-appium
#===================
COPY src /root/src
COPY supervisord.conf /root/
RUN chmod -R +x /root/src && chmod +x /root/supervisord.conf
HEALTHCHECK --interval=2s --timeout=40s --retries=1 \
CMD adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done'
CMD /usr/bin/supervisord --configuration supervisord.conf
-147
View File
@@ -1,147 +0,0 @@
FROM appium/appium:1.6.6-beta-p0
LABEL maintainer "Budi Utomo <budi.ut.1989@gmail.com>"
#=============
# Set WORKDIR
#=============
WORKDIR /root
#==================
# General Packages
#------------------
# xterm
# Terminal emulator
# supervisor
# Process manager
# socat
# Port forwarder
#------------------
# NoVNC Packages
#------------------
# x11vnc
# VNC server for X display
# openbox
# Windows manager
# menu
# Debian menu
# python-numpy
# Numpy, For faster performance: https://github.com/novnc/websockify/issues/77
# net-tools
# Netstat
#------------------
# KVM Package
# for emulator x86
# https://help.ubuntu.com/community/KVM/Installation
#------------------
# qemu-kvm
# libvirt-bin
# ubuntu-vm-builder
# bridge-utils
#==================
RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends \
xterm \
supervisor \
socat \
x11vnc \
openbox \
menu \
python-numpy \
net-tools \
qemu-kvm \
libvirt-bin \
ubuntu-vm-builder \
bridge-utils \
&& rm -rf /var/lib/apt/lists/*
#=======
# noVNC
# Use same commit id that docker-selenium uses
# https://github.com/elgalu/docker-selenium/blob/236b861177bd2917d864e52291114b1f5e4540d7/Dockerfile#L412-L413
#=======
ENV NOVNC_SHA="b403cb92fb8de82d04f305b4f14fa978003890d7" \
WEBSOCKIFY_SHA="558a6439f14b0d85a31145541745e25c255d576b"
RUN wget -nv -O noVNC.zip "https://github.com/kanaka/noVNC/archive/${NOVNC_SHA}.zip" \
&& unzip -x noVNC.zip \
&& rm noVNC.zip \
&& mv noVNC-${NOVNC_SHA} noVNC \
&& wget -nv -O websockify.zip "https://github.com/kanaka/websockify/archive/${WEBSOCKIFY_SHA}.zip" \
&& unzip -x websockify.zip \
&& mv websockify-${WEBSOCKIFY_SHA} ./noVNC/utils/websockify \
&& rm websockify.zip \
&& ln noVNC/vnc_auto.html noVNC/index.html
#======================
# Install SDK packages
#======================
ARG ANDROID_VERSION=5.0.1
ARG API_LEVEL=21
ARG PROCESSOR=x86
ARG SYS_IMG=x86_64
ARG IMG_TYPE=google_apis
ARG BROWSER=android
ENV ANDROID_VERSION=$ANDROID_VERSION \
API_LEVEL=$API_LEVEL \
PROCESSOR=$PROCESSOR \
SYS_IMG=$SYS_IMG \
IMG_TYPE=$IMG_TYPE \
BROWSER=$BROWSER
ENV PATH ${PATH}:${ANDROID_HOME}/build-tools
RUN rm ${ANDROID_HOME}/tools/emulator \
&& ln -s ${ANDROID_HOME}/tools/emulator64-${PROCESSOR} ${ANDROID_HOME}/tools/emulator
RUN echo y | android update sdk --no-ui -a -t android-${API_LEVEL},sys-img-${SYS_IMG}-${IMG_TYPE}-${API_LEVEL}
#==============================================
# Download chrome driver v2.26
# to be able to use chrome browser in emulator
# Issue: https://github.com/butomo1989/docker-android/commit/6406504f944dae73d0a0c5d8e71a17a47dff9b33
#==============================================
RUN wget -nv -O chrome.zip "https://chromedriver.storage.googleapis.com/2.26/chromedriver_linux64.zip" \
&& unzip -x chrome.zip \
&& rm chrome.zip
#================================================
# noVNC Default Configurations
# These Configurations can be changed through -e
#================================================
ENV DISPLAY=:0 \
SCREEN=0 \
SCREEN_WIDTH=1600 \
SCREEN_HEIGHT=900 \
SCREEN_DEPTH=16 \
LOCAL_PORT=5900 \
TARGET_PORT=6080 \
TIMEOUT=1 \
LOG_PATH=/var/log/supervisor
#===============
# Expose Ports
#---------------
# 4723
# Appium port
# 6080
# noVNC port
# 5554
# Emulator port
# 5555
# ADB connection port
#===============
EXPOSE 4723 6080 5554 5555
#======================
# Add Emulator Devices
#======================
COPY devices /root/devices
#===================
# Run docker-appium
#===================
COPY src /root/src
COPY supervisord.conf /root/
RUN chmod -R +x /root/src && chmod +x /root/supervisord.conf
HEALTHCHECK --interval=2s --timeout=40s --retries=1 \
CMD adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done'
CMD /usr/bin/supervisord --configuration supervisord.conf
-1
View File
@@ -1 +0,0 @@
# TODO
+52
View File
@@ -0,0 +1,52 @@
FROM appium/appium:v3.2.2-p0
ARG AUTHORS="Budi Utomo"
LABEL author="${AUTHORS} <budtmo.os@gmail.com>"
USER root
#================
# Basic Packages
#----------------
# ca-certificates
# SSL client
# python3-pip
# python-pip
# socat
# Port forwarder
# supervisor
# Process manager
# unzip
# Unzip zip file
# wget
# Network downloader
#================
RUN apt-get -qqy update && apt-get -qqy install --no-install-recommends \
ca-certificates \
python3-pip \
socat \
supervisor \
unzip \
wget \
&& apt autoremove -y \
&& apt clean all \
&& rm -rf /var/lib/apt/lists/* \
&& update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
#=====================
# Set release version
#=====================
ARG DOCKER_ANDROID_VERSION=test-version
ENV DOCKER_ANDROID_VERSION=${DOCKER_ANDROID_VERSION}
#===============
# Expose Ports
#---------------
# 4723
# Appium port
# 5554
# Emulator port
# 5555
# ADB connection port
#===============
EXPOSE 4723 5554 5555

Some files were not shown because too many files have changed in this diff Show More