notifbuddy

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'       # condition

Event data

Reference fields off the event envelope:

  • event_typelinear
  • linear.* — 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

FunctionDoes
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.

FunctionDoes
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) }}