Files
tubestation/taskcluster/taskgraph/loader/transform.py
Andrew Halberstadt ada64d6ce5 Bug 1395717 - Use filename source-test tasks are defined in as part of their label, r=dustin
This creates a new "job-from" field that contains the relative filename the job was defined
in. The filename is relative to 'config.path'. If the task came from the 'jobs' key defined
in kind.yml, this field will be set to 'kind.yml'.

MozReview-Commit-ID: 9e1tEb6XuZT
2017-08-31 16:38:08 -04:00

52 lines
1.8 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/.
from __future__ import absolute_import, print_function, unicode_literals
import logging
from ..util.templates import merge
from ..util.yaml import load_yaml
logger = logging.getLogger(__name__)
def loader(kind, path, config, params, loaded_tasks):
"""
Get the input elements that will be transformed into tasks in a generic
way. The elements themselves are free-form, and become the input to the
first transform.
By default, this reads jobs from the `jobs` key, or from yaml files
named by `jobs-from`. The entities are read from mappings, and the
keys to those mappings are added in the `name` key of each entity.
If there is a `job-defaults` config, then every job is merged with it.
This provides a simple way to set default values for all jobs of a
kind. More complex defaults should be implemented with custom
transforms.
Other kind implementations can use a different loader function to
produce inputs and hand them to `transform_inputs`.
"""
def jobs():
defaults = config.get('job-defaults')
for name, job in config.get('jobs', {}).iteritems():
if defaults:
job = merge(defaults, job)
job['job-from'] = 'kind.yml'
yield name, job
for filename in config.get('jobs-from', []):
for name, job in load_yaml(path, filename).iteritems():
if defaults:
job = merge(defaults, job)
job['job-from'] = filename
yield name, job
for name, job in jobs():
job['name'] = name
logger.debug("Generating tasks for {} {}".format(kind, name))
yield job