""" GitOps configuration schema. Manages declarative GitOps rules and event-driven automation. """ schema TypesGit: GitProvider: "github" | "gitlab" | "gitea" EventType: "push" | "pull-request" | "webhook" | "scheduled" | "health-check" | "manual" Environment: "dev" | "staging" | "prod" schema GitOpsRule: """GitOps automation rule""" # Rule name name: str # Git provider provider: TypesGit.GitProvider # Repository URL repository: str # Target branch pattern branch: str = "main" # Triggering events events: [TypesGit.EventType] # Deployment targets/environments targets: [TypesGit.Environment] # Deployment command command: str # Pre-deployment hook pre_deploy_hook?: str # Post-deployment hook post_deploy_hook?: str # Manual approval required require_approval: bool = False # Concurrency policy concurrency_limit: int = 1 check: len(name) > 0, "name must not be empty" len(repository) > 0, "repository must not be empty" len(branch) > 0, "branch must not be empty" len(events) > 0, "events must not be empty" len(targets) > 0, "targets must not be empty" len(command) > 0, "command must not be empty" concurrency_limit > 0, "concurrency_limit must be positive" schema WebhookConfig: """Webhook configuration for Git providers""" # Provider provider: TypesGit.GitProvider # Listener port port: int = 8080 # Webhook secret for validation secret?: str # Allowed events allowed_events: [TypesGit.EventType] check: port > 1024 and port <= 65535, "port must be 1024-65535" len(allowed_events) > 0, "allowed_events must not be empty" schema ScheduledTrigger: """Scheduled trigger configuration""" # Trigger name name: str # Cron expression cron: str # Associated rule rule: str # Target environment environment: TypesGit.Environment check: len(name) > 0, "name must not be empty" len(cron) > 0, "cron must not be empty" len(rule) > 0, "rule must not be empty" schema HealthCheckTrigger: """Health check based trigger configuration""" # Trigger name name: str # Health check endpoint endpoint: str # Check interval in seconds interval_secs: int = 60 # Failure threshold failure_threshold: int = 3 # Action on failure on_failure_action: str check: len(name) > 0, "name must not be empty" len(endpoint) > 0, "endpoint must not be empty" interval_secs > 0, "interval_secs must be positive" failure_threshold > 0, "failure_threshold must be positive" schema GitOpsConfig: """Global GitOps configuration""" # Automation rules rules: [GitOpsRule] # Webhooks webhooks: [WebhookConfig] = [] # Scheduled triggers scheduled: [ScheduledTrigger] = [] # Health check triggers health_checks: [HealthCheckTrigger] = [] # Default deployment strategy default_strategy: str = "rolling" # Enable dry-run by default dry_run_by_default: bool = False # Audit logging enable_audit_log: bool = True check: len(rules) >= 0, "rules must be a valid list" # Global GitOps configuration gitops_config: GitOpsConfig = { rules = [] webhooks = [] scheduled = [] health_checks = [] default_strategy = "rolling" dry_run_by_default = False enable_audit_log = True }