'CodeRabbit', 'status' => 'connected', 'github' => 'Yacineutt', 'repos' => ['weval-consulting', 'wevia-brain', 'wevads-platform', 'weval-infra'], 'features' => ['PR reviews', 'Code suggestions', 'Security scan', 'Best practices'], 'mattermost' => 'wired', 'webhook' => 'active' ]); } elseif ($action === 'webhook' || isset($payload['pull_request'])) { // GitHub PR webhook event $pr = $payload['pull_request'] ?? []; $repo = $payload['repository']['full_name'] ?? 'unknown'; $pr_title = $pr['title'] ?? 'No title'; $pr_url = $pr['html_url'] ?? ''; $pr_action = $payload['action'] ?? 'unknown'; // Forward to Mattermost $mm_msg = "**CodeRabbit** | `$repo` PR #" . ($pr['number'] ?? '?') . " $pr_action\n> $pr_title\n$pr_url"; $ch = curl_init($MM_HOOK); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5, CURLOPT_HTTPHEADER => ['Content-Type: application/json'], CURLOPT_POSTFIELDS => json_encode(['text' => $mm_msg]) ]); curl_exec($ch); curl_close($ch); // Log $logDir = '/var/log/wevia/coderabbit/'; file_put_contents($logDir . 'webhook_' . date('Ymd') . '.log', date('c') . " $pr_action $repo PR#" . ($pr['number'] ?? '?') . "\n", FILE_APPEND); echo json_encode(['status' => 'received', 'forwarded_to' => 'mattermost']); } else { echo json_encode(['status' => 'ok', 'action' => $action]); }