Key points
- The manifest lives in the repository, so trigger rules are reviewed like code.
on: allmatches any event from the provider.- Branch matching applies
branchesfirst, then removes anything matchingskip_branches. - Path matching intentionally fails open: when changed-file metadata is unknown, the rule still matches so CI is not silently skipped.
- Non-GitHub providers must name a managed
webhook_source. pipelinesaccepts scalar paths only; an empty path is rejected at parse time.
Field reference
providertrigger manifeststringOptionalgithub
Git provider the manifest is written for. Non-GitHub providers route through a managed Git Webhook Source.
provider: gitlabgithub, gitlab, bitbucket, gitea, generic
pkg/models/model.go
teamtrigger manifeststringOptionalNone
Owning team or application boundary. Runs started by this manifest inherit it for ownership and notification lineage.
team: platform/paymentsteam_pathtrigger manifeststringOptionalNone
Explicit product team path when the short team name is ambiguous.
team_path: platform/paymentswebhook_sourcetrigger manifeststringConditionalNone
Managed Git Webhook Source ID. Required for GitLab, Bitbucket, Gitea, and generic providers.
webhook_source: gitlab-mainpkg/models/model.go
managementtrigger manifeststringOptionalNone
Marks the manifest as NopsAI-managed so platform trigger overrides apply.
management: nopsaitriggers[].ontrigger rulestringRequiredNone
Event name to match. all matches any event from the provider.
on: pushall, push, pull_request, tag, provider-specific event names
pkg/gittrigger/matcher.go
triggers[].branchestrigger rulestring[]OptionalNone
Branch globs that must match. An empty list matches every branch.
branches:
- main
- release/*pkg/gittrigger/matcher.go
triggers[].skip_branchestrigger rulestring[]OptionalNone
Branch globs removed after include matching.
skip_branches:
- dependabot/*pkg/gittrigger/matcher.go
triggers[].tagstrigger rulestring[]OptionalNone
Tag globs matched on push tag events.
tags:
- "v*"triggers[].skip_repostrigger rulestring[]OptionalNone
Repository patterns that skip this rule entirely.
skip_repos:
- acme/sandbox-*triggers[].include_pathstrigger rulestring[]OptionalNone
Changed-file globs that must match when changed-file metadata is available.
include_paths:
- "services/payments/**"- Path matching intentionally fails open: when the provider does not report changed files, the rule still matches so CI is not silently skipped.
pkg/gittrigger/matcher.go
triggers[].exclude_pathstrigger rulestring[]OptionalNone
Changed-file globs removed before include matching is evaluated.
exclude_paths:
- "**/*.md"pkg/gittrigger/matcher.go
triggers[].pipelinestrigger rulestring[]RequiredNone
Pipeline paths started when the rule matches. Declared as plain scalar paths.
pipelines:
- .nopsai/pipelines/ci.yaml- Only scalar path values are supported; an empty path is rejected at parse time.
pkg/models/model.go
triggers[].scopetrigger rulestringOptionalDefault runtime scope
Runtime scope used to resolve variables and secrets for the started run.
scope: platform/productionExamples
team: platform/payments
triggers:
- on: all
skip_branches:
- dependabot/*
exclude_paths:
- "**/*.md"
- docs/**
pipelines:
- .nopsai/pipelines/ci.yamlprovider: gitlab
webhook_source: gitlab-main
team: platform/payments
triggers:
- on: push
tags:
- "v*"
pipelines:
- .nopsai/pipelines/release.yaml
scope: platform/productionHow it works
When branches is empty and either skip_branches is set or on is all, every branch is treated as included before exclusions are applied. This makes "everything except these" rules straightforward.
exclude_paths is applied before include_paths is evaluated, so a file removed by an exclusion cannot satisfy an include.
Forwarded GitHub App events reach POST /v1/git/events, which is an internal service call requiring a git-bot service token. It is not public webhook ingress and should not be exposed as such.
Implementation evidence
pkg/gittrigger/matcher.goExact branch, tag, and path matching behavior including fail-open.
pkg/models/model.goManifest and trigger struct definitions.

