Chromium Code Reviews| Index: scripts/slave/recipe_modules/trigger/api.py |
| diff --git a/scripts/slave/recipe_modules/trigger/api.py b/scripts/slave/recipe_modules/trigger/api.py |
| index afb1725508769fb18be14bc0d7ec348439b4690c..b4b4fb2796d141d5f92734a4ba1bc8980130fe49 100644 |
| --- a/scripts/slave/recipe_modules/trigger/api.py |
| +++ b/scripts/slave/recipe_modules/trigger/api.py |
| @@ -26,36 +26,59 @@ class TriggerApi(recipe_api.RecipeApi): |
| def __init__(self, **kwargs): |
| super(TriggerApi, self).__init__(**kwargs) |
| - def __call__(self, *propertiesList, **kwargs): |
| + def _port_from_properties_only(self, trigger_spec): |
| + """Convert from prevoius "properties-only" mode to trigger spec.""" |
|
smut
2015/02/28 01:49:42
s/prevouis/previous/
nodir
2015/03/02 02:26:11
Done.
|
| + builder_name = trigger_spec.get('buildername') |
| + if not builder_name: |
| + return trigger_spec |
| + |
| + props = trigger_spec.copy() |
| + del props['buildername'] |
| + return { |
| + 'builder_name': builder_name, |
| + 'properties': props, |
|
smut
2015/02/28 01:49:42
The old style might have buildbot.changes in prope
nodir
2015/03/02 02:26:11
I've updated build_internal as well https://chrome
|
| + } |
| + |
| + def __call__(self, *trigger_specs, **kwargs): |
| """Triggers new builds by builder names. |
| Args: |
| - propertiesList: a list of build property dicts for the builds to |
| - trigger. Each dict triggers a build. See "Known properties" below. |
| - name: (in kwargs) name of the step. If not specified, it is generated |
| - automatically, its format may change in future. |
| - |
| - Known properties: |
| - buildername (str): Buildbot-specific, required in Buildbot environment. |
| - buildbot.changes (a list of dicts): Buildbot-specific, changes for the |
| - triggered builds. Each change is a dict with keys (all optional): |
| - author (str) |
| - revision |
| - revlink (str): link to a web view of the revision. |
| - comment |
| - when_timestamp (int): timestamp of the change, in seconds since Unix |
| - Epoch. |
| - branch |
| - category (str): Buildbot change category |
| - files (list of str): list of changed filenames |
| - The first change is used to populate source stamp properties. |
| + trigger_specs: a list of trigger dicts, where each dict specifies a build |
| + to trigger. Supported keys: |
| + builder_name (str): in BuildBot context, builder name |
| + properties (dict): build properties for a new build. |
| + buildbot.changes (list of dict): list of Buildbot changes to create. |
|
smut
2015/02/28 01:44:51
buildbot.changes -> buildbot_changes
nodir
2015/03/02 02:26:11
Done.
|
| + See below. |
| + name: name of the step. If not specified, it is generated |
| + automatically. Its format may change in future. |
| + |
| + Buildbot changes: |
| + buildbot_changes (a list of dicts) is a list of changes for the |
| + triggered builds. Each change is a dict with keys (all optional): |
| + author (str) |
| + revision |
| + revlink (str): link to a web view of the revision. |
| + comment |
| + when_timestamp (int): timestamp of the change, in seconds since Unix |
| + Epoch. |
| + branch |
| + category (str): Buildbot change category |
| + files (list of str): list of changed filenames |
| + The first change is used to populate source stamp properties. |
| Examples: |
| + Basic: |
| + api.trigger({ |
| + 'builder_name': 'Release', |
| + 'properties': { |
| + 'my_prop': 123, |
| + }, |
| + }) |
| + |
| Create Buildbot changes: |
| api.trigger({ |
| - 'builderName': 'Release', |
| - 'my_prop': 123, |
| - 'buildbot.changes': [{ |
| + 'builder_name': 'Release', |
| + 'buildbot_changes': [{ |
| 'author': 'someone@chromium.org', |
| 'branch': 'master', |
| 'files': ['a.txt.'], |
| @@ -67,21 +90,19 @@ class TriggerApi(recipe_api.RecipeApi): |
| }] |
| }) |
| """ |
| - builder_names = [] |
| - for properties in propertiesList: |
| - assert isinstance(properties, dict), ('properties must be a dict: %s' |
| - % (properties,)) |
| - builder_name = properties.get('buildername') |
| - assert builder_name, 'buildername property is missing: %s' % (properties,) |
| - if builder_name not in builder_names: |
| - builder_names.append(builder_name) |
| - |
| - name = kwargs.get('name') or ('trigger %s' % ', '.join(builder_names)) |
| - trigger_specs = [ |
| - { |
| - 'properties': properties, |
| - } for properties in propertiesList |
| - ] |
| + # Backward-compatibility: |
| + trigger_specs = map(self._port_from_properties_only, trigger_specs) |
| + |
| + builder_names = set() |
| + for trigger in trigger_specs: |
| + assert isinstance(trigger, dict), ('trigger spec must be a dict: %s' |
| + % (trigger,)) |
| + builder_name = trigger.get('builder_name') |
| + assert builder_name, 'builder_name is missing: %s' % (trigger,) |
| + builder_names.add(builder_name) |
| + |
| + name = ( |
| + kwargs.get('name') or ('trigger %s' % ', '.join(sorted(builder_names)))) |
| return self.m.step( |
| name, |
| cmd=[], |