summaryrefslogtreecommitdiff
path: root/buildscripts/ciconfig
diff options
context:
space:
mode:
authorJonathan Abrahams <jonathan@mongodb.com>2018-04-20 13:15:14 -0400
committerJonathan Abrahams <jonathan@mongodb.com>2018-04-26 15:34:22 -0400
commita1601dd85764e1aac6128057b5681107931c64b8 (patch)
tree6d49c47e071edb6b385530dd7a05a5d7cd876a58 /buildscripts/ciconfig
parent96f2a1a8389774a495b7ea3d4ef8f8ec48af5b50 (diff)
downloadmongo-a1601dd85764e1aac6128057b5681107931c64b8.tar.gz
SERVER-33963 Add task_groups & display_tasks for compile, compile_all, compile_unittests & unittests
Diffstat (limited to 'buildscripts/ciconfig')
-rw-r--r--buildscripts/ciconfig/evergreen.py55
1 files changed, 48 insertions, 7 deletions
diff --git a/buildscripts/ciconfig/evergreen.py b/buildscripts/ciconfig/evergreen.py
index 16af4226078..9d6dfa23efa 100644
--- a/buildscripts/ciconfig/evergreen.py
+++ b/buildscripts/ciconfig/evergreen.py
@@ -11,7 +11,7 @@ import re
import yaml
-class EvergreenProjectConfig(object):
+class EvergreenProjectConfig(object): # pylint: disable=too-many-instance-attributes
"""Represent an Evergreen project configuration file."""
def __init__(self, path):
@@ -21,8 +21,12 @@ class EvergreenProjectConfig(object):
self.path = path
self.tasks = [Task(task_dict) for task_dict in self._conf["tasks"]]
self._tasks_by_name = {task.name: task for task in self.tasks}
+ self.task_groups = [
+ TaskGroup(task_group_dict) for task_group_dict in self._conf.get("task_groups", [])
+ ]
+ self._task_groups_by_name = {task_group.name: task_group for task_group in self.task_groups}
self.variants = [
- Variant(variant_dict, self._tasks_by_name)
+ Variant(variant_dict, self._tasks_by_name, self._task_groups_by_name)
for variant_dict in self._conf["buildvariants"]
]
self._variants_by_name = {variant.name: variant for variant in self.variants}
@@ -40,6 +44,15 @@ class EvergreenProjectConfig(object):
return self._tasks_by_name.get(task_name)
@property
+ def task_group_names(self):
+ """Get the list of task_group names."""
+ return self._task_groups_by_name.keys()
+
+ def get_task_group(self, task_group_name):
+ """Return the task_group with the given name as a Task instance."""
+ return self._task_groups_by_name.get(task_group_name)
+
+ @property
def lifecycle_task_names(self):
"""Get the list of names of the tasks that have not been excluded from test lifecycle."""
excluded = self._get_test_lifecycle_excluded_task_names()
@@ -99,17 +112,45 @@ class Task(object):
return self.name
+class TaskGroup(object):
+ """Represent a task_group configuration as found in an Evergreen project configuration file."""
+
+ def __init__(self, conf_dict):
+ """Initialize a TaskGroup from a dictionary containing its configuration."""
+ self.raw = conf_dict
+
+ @property
+ def name(self):
+ """Get the task_group name."""
+ return self.raw["name"]
+
+ @property
+ def tasks(self):
+ """Get the list of task names for task_group."""
+ return self.raw.get("tasks", [])
+
+ def __str__(self):
+ return self.name
+
+
class Variant(object):
"""Build variant configuration as found in an Evergreen project configuration file."""
- def __init__(self, conf_dict, task_map):
+ def __init__(self, conf_dict, task_map, task_group_map):
"""Initialize Variant."""
self.raw = conf_dict
run_on = self.run_on
- self.tasks = [
- VariantTask(task_map.get(t["name"]), t.get("distros", run_on), self)
- for t in conf_dict["tasks"]
- ]
+ self.tasks = []
+ for task in conf_dict["tasks"]:
+ task_name = task.get("name")
+ if task_name in task_group_map:
+ # A task in conf_dict may be a task_group, containing a list of tasks.
+ for task_in_group in task_group_map.get(task_name).tasks:
+ self.tasks.append(
+ VariantTask(task_map.get(task_in_group), task.get("distros", run_on), self))
+ else:
+ self.tasks.append(
+ VariantTask(task_map.get(task["name"]), task.get("distros", run_on), self))
self.distro_names = set(run_on)
for task in self.tasks:
self.distro_names.update(task.run_on)