blob: 61f46d09895f74dcf7c940b888eeac2b7243b9ea [file] [log] [blame] [view]
<a id="task_expression"/>
Task Expression
--------------
The tasks in subtask and preload-task can be defined using a Task Expression.
Each task expression can contain multiple tasks (all can be optional). Tasks
from other files and refs can be referenced using [Task Reference](#task_reference).
```
TASK_EXPR = TASK_REFERENCE [ WHITE_SPACE * '|' [ WHITE_SPACE * TASK_EXPR ] ]
```
To define a task that may not exist and that will not cause the task referencing
it to be INVALID, follow the task name with pipe (`|`) character. This feature
is particularly useful when a property is used in the task name.
```
preload-task = Optional task ${_name} |
```
To define an alternate task to load when an optional task does not exist,
list the alternate task name after the pipe (`|`) character. This feature
may be chained together as many times as needed.
```
subtask = Optional Subtask ${_name} |
Backup Optional Subtask ${_name} Backup |
Default Subtask # Must exist if the above two don't!
```
<a id="task_reference"/>
Task Reference
---------
Tasks reference can be a simple task name when the defined task is intended to be in
the same file, tasks from other files and refs can also be referenced by syntax explained
below.
```
TASK_REFERENCE = [
[ // TASK_FILE_PATH ]
[ @USERNAME [ TASK_FILE_PATH ] ] |
[ %GROUP_NAME [ TASK_FILE_PATH ] ] |
[ %%GROUP_UUID [ TASK_FILE_PATH ] ] |
[ TASK_FILE_PATH ]
] '^' TASK_NAME
```
To reference a task from root task.config (top level task.config file of a repository)
on the current ref, prefix the task name with `^`.
Example:
task/.../<any>.config
```
...
preload-task = ^Task in root task config
...
```
task.config
```
...
[task "Task in root task config"]
...
```
To provide an absolute reference to a task under the `task` folder, provide the subpath starting
from `task` directory with a leading `/` followed by a `^` and then task name.
Example:
task.config
```
...
subtask = /foo/bar/baz.config^Absolute Example Task
...
```
task/foo/bar/baz.config
```
...
[task "Absolute Example Task"]
...
```
Similarly, to provide reference to tasks which are in a subdirectory of the file containing the
current task avoid the leading `/`.
Example:
task/foo/file.config
```
...
subtask = bar/baz.config^Relative Example Task
...
```
task/foo/bar/baz.config
```
...
[task "Relative Example Task"]
...
```
Relative tasks specified in a root task.config would look for a file path under the task directory.
Example:
task.config
```
...
subtask = foo/bar.config^Relative from Root Example Task
...
```
task/foo/bar.config
```
...
[task "Relative from Root Example Task"]
...
```
To reference a task from a specific user ref (All-Users.git:refs/users/<user>), specify the
username with `@`.
when referencing from user refs, to get task from top level task.config on a user ref use
`@<username>^<task_name>` and to get any task under the task directory use the relative
path, like: `@<username>/<relative path from task dir>^<task_name>`. It doesn't matter which
project, ref and file one is referencing from while using this syntax.
Example:
Assumption: Account id of user_a is 1000000
All-Users:refs/users/00/1000000:task.config
```
...
[task "top level task"]
...
```
All-Users:refs/users/00/1000000:/task/dir/common.config
```
...
[task "common task"]
...
```
All-Projects:refs/meta/config:/task.config
```
...
preload-task = @user_a_username^top level task
preload-task = @user_a_username/dir/common.config^common task
...
```
To reference a task from the root task.config on the root project and branch
(defaults to `All-Projects` and `refs/meta/config` and is
[configurable](config.html#section-rootconfig)), prefix the task name with
`//^` and to reference a task from the task dir on the root project and branch,
use `//<relative path from task dir>^<task_name>`. It doesn't matter which
project, ref and file one is referencing from while using this syntax.
Example:
All-Projects:refs/meta/config:task.config
```
...
[task "root task"]
...
```
All-Projects:refs/meta/config:/task/dir/sample.config
```
...
[task "sample task"]
...
```
All-Users:refs/users/00/1000000:task.config
```
...
preload-task = //dir/sample.config^sample task
preload-task = //^root task
...
```
To reference a task from a specific group ref (All-Users.git:refs/groups/<sharded-group-uuid>),
specify the group name with `%` or group uuid with `%%`.
When referencing from group refs, to get task from top level task.config on a group ref use
`%<group_name>^<task_name>` or `%%<group_uuid>^<task_name>` and to get any task under the
task directory use the relative path,
like: `%<group_name>/<relative path from task dir>^<task_name>` or
`%%<group_uuid>/<relative path from task dir>^<task_name>`.
It doesn't matter which project, ref and file one is referencing from while using this syntax.
Example:
Assumption: Group uuid of group_a is 720269095421a08a24889e29d092df1839a7a706
All-Users:refs/groups/72/720269095421a08a24889e29d092df1839a7a706:task.config
```
...
[task "top level task"]
...
```
All-Users:refs/groups/72/720269095421a08a24889e29d092df1839a7a706:/task/dir/common.config
```
...
[task "common task"]
...
```
All-Projects:refs/meta/config:/task.config
```
...
preload-task = %group_a^top level task
preload-task = %%720269095421a08a24889e29d092df1839a7a706/dir/common.config^common task
...
```