Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
android_env/apps
16 changes: 10 additions & 6 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,17 @@ jobs:
with:
python-version: ${{ matrix.python-version }}

- name: Install dependencies
- name: Setup Bazel
uses: bazel-contrib/setup-bazel@0.19.0
with:
bazelisk-cache: true
disk-cache: true
repository-cache: true

- name: Configure MODULE.bazel python version
run: |
pip install --upgrade pip setuptools
pip install .[testing]
sed -i 's/python_version = "3.11"/python_version = "${{ matrix.python-version }}"/' MODULE.bazel
- name: Run tests
run: |
# Find all test files, print their names and execute them in parallel
# with a maximum of 20 proccesses.
find . -type f -name "*_test.py" -print0 | xargs -t -0 -n1 -P 20 python3
bazel test //...
43 changes: 43 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
module(
name = "android_env",
version = "1.3.0",
)

# Core rules
bazel_dep(name = "rules_python", version = "0.34.0")
bazel_dep(name = "rules_proto_grpc_python", version = "5.0.0")
bazel_dep(name = "protobuf", version = "27.2")
bazel_dep(name = "rules_proto", version = "6.0.2")

# Local Python Toolchain (uses system python3)
local_runtime_repo = use_repo_rule(
"@rules_python//python/local_toolchains:repos.bzl",
"local_runtime_repo",
)
local_runtime_toolchains_repo = use_repo_rule(
"@rules_python//python/local_toolchains:repos.bzl",
"local_runtime_toolchains_repo",
)

local_runtime_repo(
name = "local_python3",
interpreter_path = "python3",
on_failure = "fail",
)

local_runtime_toolchains_repo(
name = "local_toolchains",
runtimes = ["local_python3"],
)

register_toolchains("@local_toolchains//:all")

# Pip dependencies (configured to use the same local python3)
pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip")
pip.parse(
hub_name = "pip",
python_version = "3.11",
python_interpreter = "python3",
requirements_lock = "//:requirements.txt",
)
use_repo(pip, "pip")
127 changes: 127 additions & 0 deletions android_env/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
load("@rules_python//python:defs.bzl", "py_library", "py_test")
load("@rules_python//python:packaging.bzl", "py_package", "py_wheel")

package(default_visibility = ["//visibility:public"])

py_library(
name = "env_interface",
srcs = ["env_interface.py"],
deps = [
"//android_env/proto:adb_py_pb2",
"//android_env/proto:state_py_pb2",
"@pip//dm_env",
"@pip//numpy",
],
)

py_library(
name = "environment",
srcs = ["environment.py"],
deps = [
":env_interface",
"//android_env/components:adb_call_parser",
"//android_env/components:coordinator",
"//android_env/components:task_manager",
"//android_env/components/simulators:base_simulator",
"//android_env/proto:adb_py_pb2",
"//android_env/proto:state_py_pb2",
"@pip//absl_py",
"@pip//dm_env",
"@pip//numpy",
],
)

py_test(
name = "environment_test",
srcs = ["environment_test.py"],
deps = [
":environment",
"//android_env/components:config_classes",
"//android_env/components:coordinator",
"//android_env/components:task_manager",
"//android_env/components/simulators:base_simulator",
"//android_env/components/simulators/fake:fake_simulator",
"//android_env/proto:adb_py_pb2",
"//android_env/proto:state_py_pb2",
"@pip//absl_py",
"@pip//dm_env",
"@pip//numpy",
],
)

py_library(
name = "loader",
srcs = ["loader.py"],
deps = [
":environment",
"//android_env/components:config_classes",
"//android_env/components:coordinator",
"//android_env/components:device_settings",
"//android_env/components:task_manager",
"//android_env/components/simulators/emulator:emulator_simulator",
"//android_env/components/simulators/emulator:tcp_ports",
"//android_env/components/simulators/fake:fake_simulator",
"//android_env/proto:task_py_pb2",
"@pip//absl_py",
"@pip//protobuf",
],
)

py_test(
name = "loader_test",
srcs = ["loader_test.py"],
deps = [
":env_interface",
":loader",
"//android_env/components:config_classes",
"//android_env/components:coordinator",
"//android_env/components:device_settings",
"//android_env/components:task_manager",
"//android_env/components/simulators/emulator:emulator_simulator",
"//android_env/components/simulators/emulator:tcp_ports",
"//android_env/components/simulators/fake:fake_simulator",
"//android_env/proto:task_py_pb2",
"@pip//absl_py",
],
)

# Packaging rules for PyPI release

py_package(
name = "android_env_pkg",
packages = ["android_env"],
deps = [
":loader",
"//android_env/wrappers:a11y_grpc_wrapper",
"//android_env/wrappers:discrete_action_wrapper",
"//android_env/wrappers:flat_interface_wrapper",
"//android_env/wrappers:float_pixels_wrapper",
"//android_env/wrappers:gym_wrapper",
"//android_env/wrappers:image_rescale_wrapper",
"//android_env/wrappers:last_action_wrapper",
"//android_env/wrappers:rate_limit_wrapper",
"//android_env/wrappers:swipe_action_wrapper",
"//android_env/wrappers:tap_action_wrapper",
],
)

py_wheel(
name = "android_env_wheel",
author = "DeepMind",
distribution = "android_env",
license = "Apache License, Version 2.0",
requires = [
"absl-py>=0.1.0",
"dm-env>=1.6",
"numpy>=1.26.0",
"portpicker>=1.6.0",
"pygame>=2.6.0",
"pillow>=10.4.0",
"gymnasium>=0.29.1",
"protobuf>=5.27.2",
"grpcio>=1.64.2",
],
summary = "AndroidEnv: A Gym/Gymnasium Environment for Android",
version = "1.3.0",
deps = [":android_env_pkg"],
)
Loading
Loading