Templates
Expression syntax for channel names and creation conditions.
Channel names and creation conditions use GitHub Actions expression syntax, run against the incoming event.
${{ linear.data.identifier }} # channel name
linear.data.state.name == 'Done' # conditionEvent data
Reference fields off the event envelope:
event_type—linearlinear.*— the raw event payload
Example: linear.data.state.name, linear.action.
Operators
== != < <= > >= · && || ! · ( ) · . [ ] · .* (object filter)
Literals: strings ('...'), numbers, true, false, null.
== compares strings case-insensitively: 'done' == 'Done' is true.
Functions
| Function | Does |
|---|---|
contains(a, b) | Substring, or array membership |
startsWith(str, prefix) | Prefix check |
endsWith(str, suffix) | Suffix check |
format(fmt, ...) | {0}, {1} placeholders |
join(array, sep?) | Join array (default ,) |
toJSON(value) | Serialize to JSON |
fromJSON(str) | Parse JSON |
String functions are case-insensitive. Names are case-insensitive.
Extension functions (Handlebars-style)
Beyond the GitHub Actions dialect, we add Handlebars-style string helpers. More will be added over time.
| Function | Does |
|---|---|
lowercase(str) | Lowercase a string |
Not supported
CI-only functions error if used: hashFiles, success, always, cancelled, failure.
Examples
# only when moved to Done
linear.data.state.name == 'Done'
# bugs only
contains(join(linear.data.labels.*.name), 'bug')
# name by identifier (the default channel-name template)
tkt-${{ lowercase(linear.data.identifier) }}