mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 22:01:30 +00:00
c6b11c1a07
MozReview-Commit-ID: C3PZItmMJcs --HG-- extra : rebase_source : 53d84145e19573d2e7b25b530a40dabcbe953e47
50 lines
1.9 KiB
ReStructuredText
50 lines
1.9 KiB
ReStructuredText
Task Definition YAML Templates
|
|
==============================
|
|
|
|
A few kinds of tasks are described using templated YAML files. These files
|
|
allow some limited forms of inheritance and template substitution as well as
|
|
the usual YAML features, as described below.
|
|
|
|
Please do not use these features in new kinds. If you are tempted to use
|
|
variable substitution over a YAML file to define tasks, please instead
|
|
implement a new kind-specific transform to accopmlish your goal. For example,
|
|
if the current push-id must be included as an argument in
|
|
``task.payload.command``, write a transform function that makes that assignment
|
|
while building a job description, rather than parameterizing that value in the
|
|
input to the transforms.
|
|
|
|
Inheritance
|
|
-----------
|
|
|
|
One YAML file can "inherit" from another by including a top-level ``$inherits``
|
|
key. That key specifies the parent file in ``from``, and optionally a
|
|
collection of variables in ``variables``. For example:
|
|
|
|
.. code-block:: yaml
|
|
|
|
$inherits:
|
|
from: 'tasks/builds/base_linux32.yml'
|
|
variables:
|
|
build_name: 'linux32'
|
|
build_type: 'dbg'
|
|
|
|
Inheritance proceeds as follows: First, the child document has its template
|
|
substitutions performed and is parsed as YAML. Then, the parent document is
|
|
parsed, with substitutions specified by ``variables`` added to the template
|
|
substitutions. Finally, the child document is merged with the parent.
|
|
|
|
To merge two JSON objects (dictionaries), each value is merged individually.
|
|
Lists are merged by concatenating the lists from the parent and child
|
|
documents. Atomic values (strings, numbers, etc.) are merged by preferring the
|
|
child document's value.
|
|
|
|
Substitution
|
|
------------
|
|
|
|
Each document is expanded using the PyStache template engine before it is
|
|
parsed as YAML. The parameters for this expansion are specific to the task
|
|
kind.
|
|
|
|
Simple value substitution looks like ``{{variable}}``. Function calls look
|
|
like ``{{#function}}argument{{/function}}``.
|