summaryrefslogtreecommitdiffstats
path: root/taskcluster/android_taskgraph/util/group_by.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:35:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-15 03:35:49 +0000
commitd8bbc7858622b6d9c278469aab701ca0b609cddf (patch)
treeeff41dc61d9f714852212739e6b3738b82a2af87 /taskcluster/android_taskgraph/util/group_by.py
parentReleasing progress-linux version 125.0.3-1~progress7.99u1. (diff)
downloadfirefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.tar.xz
firefox-d8bbc7858622b6d9c278469aab701ca0b609cddf.zip
Merging upstream version 126.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'taskcluster/android_taskgraph/util/group_by.py')
-rw-r--r--taskcluster/android_taskgraph/util/group_by.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/taskcluster/android_taskgraph/util/group_by.py b/taskcluster/android_taskgraph/util/group_by.py
new file mode 100644
index 0000000000..3c3b10980c
--- /dev/null
+++ b/taskcluster/android_taskgraph/util/group_by.py
@@ -0,0 +1,51 @@
+# 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/.
+
+from taskgraph.util.dependencies import group_by
+
+
+@group_by("component")
+def component_grouping(config, tasks):
+ groups = {}
+ for task in tasks:
+ component = task.attributes.get("component")
+ if component == "all":
+ continue
+
+ build_type = task.attributes.get("build-type")
+ groups.setdefault((component, build_type), []).append(task)
+
+ tasks_for_all_components = [
+ task
+ for task in tasks
+ if task.attributes.get("component") == "all"
+ # We just want to depend on the task that waits on all chunks. This way
+ # we have a single dependency for that kind
+ and task.attributes.get("is_final_chunked_task", True)
+ ]
+ for (_, build_type), tasks in groups.items():
+ tasks.extend(
+ [
+ task
+ for task in tasks_for_all_components
+ if task.attributes.get("build-type") == build_type
+ ]
+ )
+
+ return groups.values()
+
+
+@group_by("build-type")
+def build_type_grouping(config, tasks):
+ groups = {}
+ for task in tasks:
+ # We just want to depend on the task that waits on all chunks. This way
+ # we have a single dependency for that kind
+ if not task.attributes.get("is_final_chunked_task", True):
+ continue
+
+ build_type = task.attributes.get("build-type")
+ groups.setdefault(build_type, []).append(task)
+
+ return groups.values()