Expression format
Filters use Lisp-style S-expressions:(operator argument ...). An expression evaluates to true (process the event) or false (ignore it). Put strings in double quotes; write numbers and booleans without quotes. Lists use parentheses.
Refer to fields by dot-separated paths, such as "action", "issue.state", or "pull_request.head.ref". Use * for fields inside objects in an array, for example "tags.*.name". Field paths are case-sensitive and must match the JSON payload.
Operators
To test “not equal,” use
(not (eq "field" value)). starts-with applies to strings; numeric operators require numeric values.
Test a filter
Test with sample payloads that should match and should be rejected. Check field names, types, capitalization, nested paths, and array contents. Comparisons are type-safe: incompatible types evaluate to false. Missing or null fields evaluate to false for every operation except(not (exists "field")), which evaluates to true. Empty lists passed to has-all or has-any evaluate to false. Whitespace and line breaks do not affect an expression.