| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package webhooks
- import (
- "github.com/OliveTin/OliveTin/internal/config"
- )
- // ApplyGitHubTemplate applies GitHub-specific template configurations
- // This allows users to use simple template names instead of configuring everything manually
- func ApplyGitHubTemplate(cfg *config.WebhookConfig, template string) {
- applier := getTemplateApplier(template)
- if applier != nil {
- applier(cfg)
- }
- }
- type templateApplier func(*config.WebhookConfig)
- func getTemplateApplier(template string) templateApplier {
- templateMap := map[string]templateApplier{
- "github-push": applyGitHubPushTemplate,
- "github-pr": applyGitHubPRTemplate,
- "github-pull-request": applyGitHubPRTemplate,
- "github-release": applyGitHubReleaseTemplate,
- "github-workflow": applyGitHubWorkflowTemplate,
- }
- return templateMap[template]
- }
- func setDefaultAuth(cfg *config.WebhookConfig) {
- if cfg.AuthHeader == "" {
- cfg.AuthHeader = "X-Hub-Signature-256"
- }
- if cfg.AuthType == "" {
- cfg.AuthType = "hmac-sha256"
- }
- }
- func ensureMatchHeaders(cfg *config.WebhookConfig) {
- if len(cfg.MatchHeaders) == 0 {
- cfg.MatchHeaders = make(map[string]string)
- }
- }
- func ensureExtract(cfg *config.WebhookConfig) {
- if len(cfg.Extract) == 0 {
- cfg.Extract = make(map[string]string)
- }
- }
- func setExtractIfMissing(cfg *config.WebhookConfig, key, value string) {
- if _, exists := cfg.Extract[key]; !exists {
- cfg.Extract[key] = value
- }
- }
- func setMatchHeaderIfMissing(cfg *config.WebhookConfig, key, value string) {
- if _, exists := cfg.MatchHeaders[key]; !exists {
- cfg.MatchHeaders[key] = value
- }
- }
- func applyGitHubPushTemplate(cfg *config.WebhookConfig) {
- setDefaultAuth(cfg)
- ensureMatchHeaders(cfg)
- setMatchHeaderIfMissing(cfg, "X-GitHub-Event", "push")
- ensureExtract(cfg)
- setExtractIfMissing(cfg, "git_repository", "$.repository.full_name")
- setExtractIfMissing(cfg, "git_ref", "$.ref")
- setExtractIfMissing(cfg, "git_commit", "$.head_commit.id")
- setExtractIfMissing(cfg, "git_branch", "$.ref")
- setExtractIfMissing(cfg, "git_message", "$.head_commit.message")
- setExtractIfMissing(cfg, "git_author", "$.head_commit.author.name")
- }
- func applyGitHubPRTemplate(cfg *config.WebhookConfig) {
- setDefaultAuth(cfg)
- ensureMatchHeaders(cfg)
- setMatchHeaderIfMissing(cfg, "X-GitHub-Event", "pull_request")
- ensureExtract(cfg)
- setExtractIfMissing(cfg, "pr_number", "$.number")
- setExtractIfMissing(cfg, "pr_title", "$.pull_request.title")
- setExtractIfMissing(cfg, "pr_author", "$.pull_request.user.login")
- setExtractIfMissing(cfg, "pr_action", "$.action")
- setExtractIfMissing(cfg, "git_repository", "$.repository.full_name")
- setExtractIfMissing(cfg, "pr_state", "$.pull_request.state")
- setExtractIfMissing(cfg, "pr_head_sha", "$.pull_request.head.sha")
- }
- func applyGitHubReleaseTemplate(cfg *config.WebhookConfig) {
- setDefaultAuth(cfg)
- ensureMatchHeaders(cfg)
- setMatchHeaderIfMissing(cfg, "X-GitHub-Event", "release")
- ensureExtract(cfg)
- setExtractIfMissing(cfg, "release_action", "$.action")
- setExtractIfMissing(cfg, "release_tag", "$.release.tag_name")
- setExtractIfMissing(cfg, "release_name", "$.release.name")
- setExtractIfMissing(cfg, "git_repository", "$.repository.full_name")
- setExtractIfMissing(cfg, "release_author", "$.release.author.login")
- }
- func applyGitHubWorkflowTemplate(cfg *config.WebhookConfig) {
- setDefaultAuth(cfg)
- ensureMatchHeaders(cfg)
- setMatchHeaderIfMissing(cfg, "X-GitHub-Event", "workflow_run")
- ensureExtract(cfg)
- setExtractIfMissing(cfg, "workflow_name", "$.workflow_run.name")
- setExtractIfMissing(cfg, "workflow_status", "$.workflow_run.status")
- setExtractIfMissing(cfg, "workflow_conclusion", "$.workflow_run.conclusion")
- setExtractIfMissing(cfg, "git_repository", "$.repository.full_name")
- setExtractIfMissing(cfg, "git_commit", "$.workflow_run.head_sha")
- setExtractIfMissing(cfg, "git_branch", "$.workflow_run.head_branch")
- }
|