129 lines
4.2 KiB
Python
129 lines
4.2 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||
|
||
import os
|
||
|
||
from taskgraph.transforms.base import TransformSequence
|
||
|
||
transforms = TransformSequence()
|
||
|
||
|
||
_ANDROID_TASK_NAME_PREFIX = "android-"
|
||
|
||
|
||
@transforms.add
|
||
def set_component_attribute(config, tasks):
|
||
for task in tasks:
|
||
component_name = task.pop("component", None)
|
||
if not component_name:
|
||
task_name = task["name"]
|
||
if task_name.startswith(_ANDROID_TASK_NAME_PREFIX):
|
||
component_name = task_name[len(_ANDROID_TASK_NAME_PREFIX) :]
|
||
else:
|
||
raise NotImplementedError(
|
||
f"Cannot determine component name from task {task_name}"
|
||
)
|
||
|
||
attributes = task.setdefault("attributes", {})
|
||
attributes["component"] = component_name
|
||
|
||
yield task
|
||
|
||
|
||
@transforms.add
|
||
def define_ui_test_command_line(config, tasks):
|
||
def apk_path(component_fragment, variant, apk_filename):
|
||
return os.path.join(
|
||
"/builds/worker/workspace/obj-build",
|
||
"gradle/build",
|
||
f"mobile/android/android-components/{component_fragment}",
|
||
f"outputs/apk/{variant}",
|
||
apk_filename,
|
||
)
|
||
|
||
for task in tasks:
|
||
component = task["attributes"]["component"]
|
||
device_type = "arm" # This maps to existing Flank configurations in automation/taskcluster/androidTest (e.g, flank-arm.yml)
|
||
|
||
apk_app, apk_test = None, None
|
||
|
||
if component == "samples-browser":
|
||
# Case 2: Exact match for "samples-browser" – gecko paths with "-debug"
|
||
apk_app = apk_path(
|
||
"samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
|
||
)
|
||
apk_test = apk_path(
|
||
"samples/browser",
|
||
"androidTest/gecko/debug",
|
||
"samples-browser-gecko-debug-androidTest.apk",
|
||
)
|
||
|
||
elif component.startswith("samples-"):
|
||
# Case 3: Other samples-* (e.g., samples-glean)
|
||
sample = component.replace("samples-", "")
|
||
apk_app = apk_path(
|
||
f"samples/{sample}", "debug", f"samples-{sample}-debug.apk"
|
||
)
|
||
apk_test = apk_path(
|
||
f"samples/{sample}",
|
||
"androidTest/debug",
|
||
f"samples-{sample}-debug-androidTest.apk",
|
||
)
|
||
|
||
elif "-" in component:
|
||
# Case 1a: Component with dash (e.g., feature-share → components/feature/share)
|
||
category, submodule = component.split("-", 1)
|
||
apk_app = apk_path(
|
||
"samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
|
||
)
|
||
apk_test = apk_path(
|
||
f"components/{category}/{submodule}",
|
||
"androidTest/debug",
|
||
f"{component}-debug-androidTest.apk",
|
||
)
|
||
|
||
else:
|
||
# Case 1b: Component with no dash (e.g., browser → components/browser/engine-gecko)
|
||
apk_app = apk_path(
|
||
"samples/browser", "gecko/debug", "samples-browser-gecko-debug.apk"
|
||
)
|
||
apk_test = apk_path(
|
||
f"components/{component}/engine-gecko",
|
||
"androidTest/debug",
|
||
"browser-engine-gecko-debug-androidTest.apk",
|
||
)
|
||
|
||
run = task.setdefault("run", {})
|
||
post_gradlew = run.setdefault("post-gradlew", [])
|
||
post_gradlew.append(
|
||
[
|
||
"python3",
|
||
"../../../taskcluster/scripts/tests/test-lab.py",
|
||
device_type,
|
||
apk_app,
|
||
"--apk_test",
|
||
apk_test,
|
||
]
|
||
)
|
||
|
||
yield task
|
||
|
||
|
||
@transforms.add
|
||
def define_treeherder_symbol(config, tasks):
|
||
for task in tasks:
|
||
treeherder = task.setdefault("treeherder")
|
||
treeherder.setdefault("symbol", f"{task['attributes']['component']}(unit)")
|
||
|
||
yield task
|
||
|
||
|
||
@transforms.add
|
||
def define_description(config, tasks):
|
||
for task in tasks:
|
||
task.setdefault(
|
||
"description",
|
||
f"Run unit/ui tests on device for {task['attributes']['component']}",
|
||
)
|
||
yield task
|