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
52 lines
1.8 KiB
Python
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
|