Files
html/api/coderabbit-webhook.php
2026-04-12 22:57:03 +02:00

50 lines
2.0 KiB
PHP

<?php
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') exit;
require_once '/opt/wevads/vault/credentials.php';
$payload = json_decode(file_get_contents('php://input'), true) ?: [];
$action = $payload['action'] ?? $_GET['action'] ?? 'status';
// Mattermost DeerFlow hook
$MM_HOOK = 'https://mm.weval-consulting.com/hooks/pt54hzthf3b6pe6rgp1ionipnh';
if ($action === 'status') {
echo json_encode([
'service' => '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]);
}