1 # This Source Code Form is subject to the terms of the Mozilla Public
2 # License, v. 2.0. If a copy of the MPL was not distributed with this
3 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
5 from taskgraph
.transforms
.base
import TransformSequence
7 from ..build_config
import get_path
, get_upstream_deps_for_all_gradle_projects
8 from ..gradle
import get_gradle_project
10 transforms
= TransformSequence()
14 def add_components_optimization(config
, tasks
):
16 attributes
= task
.get("attributes", {})
17 # TODO bug 1806454 - Use a single attribute instead of 2. This is a historical
18 # discrepancy where A-C are labeled by build-types but APKs by release ones.
20 # The monorepo migration made this discrepancy more obvious compared to when
21 # A-C and APKs lived in different repos
22 build_type
= attributes
.get("build-type", "")
23 release_type
= attributes
.get("release-type", "")
25 # We want to optimize away tasks on all android-components and APKs as long as
26 # these tasks are not labeled nightly, beta, or release.
28 # Any change that impacts all a-c (e.g. a change in the a-c gradle config)
29 # should also trigger APK builds and tests.
31 type_
not in ("nightly", "beta", "release")
32 for type_
in (build_type
, release_type
)
34 optimization
= task
.setdefault("optimization", {})
35 skip_unless_changed
= optimization
.setdefault("skip-unless-changed", [])
36 skip_unless_changed
.extend(
38 "android-components/build.gradle",
39 "android-components/settings.gradle",
40 "android-components/buildSrc.*",
41 "android-components/gradle.properties",
42 "android-components/gradle/wrapper/gradle-wrapper.properties",
43 "android-components/plugins/dependencies/**",
51 def extend_optimization_if_one_already_exists(config
, tasks
):
52 deps_per_component
= get_upstream_deps_for_all_gradle_projects()
55 optimization
= task
.get("optimization")
57 skip_unless_changed
= optimization
["skip-unless-changed"]
58 skip_unless_changed
.append(f
"{config.path}/**")
60 gradle_project
= get_gradle_project(task
)
61 # TODO Remove this special case when ui-test.sh is able to accept "browser-engine-gecko"
62 if gradle_project
== "browser":
63 gradle_project
= "browser-engine-gecko"
66 dependencies
= deps_per_component
[gradle_project
]
67 gradle_project_and_deps
= [gradle_project
] + dependencies
69 skip_unless_changed
.extend(
72 _get_path(gradle_project
)
73 for gradle_project
in gradle_project_and_deps
81 def _get_path(gradle_project
):
82 if gradle_project
== "focus":
83 return "focus-android/**"
84 elif gradle_project
== "service-telemetry":
85 return "focus-android/service-telemetry/**"
86 elif gradle_project
== "fenix":
89 return f
"android-components/{get_path(gradle_project)}/**"