triggers: key. You can declare multiple triggers;
each is a named entry with a source and an event.
Trigger schema
Every trigger is a named entry inside thetriggers: map. The name is an arbitrary
key you choose — it appears in logs and the dashboard to identify which trigger
fired a run.
Where the event comes from. For an integration (GitHub, Sentry, a custom
webhook), this is the connection slug you get after connecting it — for
example
github_acme — not the bare provider name. For on-demand runs it is
the literal string manual. See Integrations for how
slugs work.The specific event from that source (for example
push, issue.created,
received, or fire). Must be at least one character. Each integration
page lists the events it emits.A CEL expression that is parsed but not yet evaluated. Reserved for future
filtering (for example
event.ref == "refs/heads/main"). Today the trigger fires on every
matching (source, event) pair regardless of this field.Optional extra configuration passed to the trigger source. Contents are
source-specific and may be omitted for most sources.
Manual trigger
The simplest trigger needs no integration. It fires when you click Run in the dashboard or call the API. Its source is the literal stringmanual.
Integration triggers
Integration triggers start a run from an external system’s events. Connect the integration once, then reference its connection slug:GitHub
Pushes and other repository events.
Sentry
Issue lifecycle events.
Custom webhook
Any system that can POST.
Notes
event.ref on a push is the full Git ref (for example refs/heads/main),
exactly as the provider sends it — not the bare branch name.filter is parsed but not evaluated — a trigger fires on every matching
(source, event) pair regardless of the filter expression. This changes in a
future release when CEL filter evaluation is enabled. GitLab triggers are on the
roadmap.Coming soon
Two trigger capabilities are under active development: Cron triggers — run a workflow on a recurring schedule, declared in the YAML like any other trigger. The design:source: cron, event: tick, a raw 5-field
cron schedule (minute granularity), and an optional IANA timezone (UTC by
default). A tick fires the latest definition on the default branch; missed ticks
are skipped, not backfilled.
{source, event} selector shape, used on a job
(listening.on / listening.until) so it reacts to events repeatedly inside one
run. See Listening Jobs.
Related pages
Integrations
Connections, slugs, and every available integration.
Trigger sources reference
Sources and events at a glance.