Gitea CNB Parser 是一个 Gitea native first 的 webhook parser MVP:读取 .gitea.yml,把 Gitea webhook payload 归一化为 NormalizedEvent,并匹配命中的 pipeline。
package main
import (
"log"
runner "cnb.cool/zishuo/runner"
)
func main() {
parser, err := runner.NewParserFromFile("docs/.gitea.yml")
if err != nil {
log.Fatal(err)
}
result, err := parser.NormalizeAndMatch(
map[string]string{
"X-Gitea-Delivery": "delivery-id",
"X-Gitea-Event": "push",
},
map[string]any{
"ref": "refs/heads/main",
"before": "old-sha",
"after": "new-sha",
"repository": map[string]any{
"full_name": "owner/repo",
"default_branch": "main",
},
},
)
if err != nil {
log.Fatal(err)
}
log.Printf("matched pipelines: %v", result.Pipelines)
}
go test ./...
go vet ./...
go run ./cmd/gitea-cnb-parser validate --config docs/.gitea.yml
go run ./cmd/gitea-cnb-parser replay --config docs/.gitea.yml --fixture docs/fixtures/gitea-webhooks/push.main.json
核心蓝图见 docs/plans/gitea-cnb-parser_blueprint.md。