feat: 初始化雄戈商城服务端代码与Webhook自动部署配置

这个提交包含在:
wikiboss
2026-09-12 16:40:24 +08:00
当前提交 e90ec58e61
共有 6438 个文件被更改,包括 1136083 次插入 和 0 次删除

49
public/webhook.php 普通文件
查看文件

@@ -0,0 +1,49 @@
<?php
/**
* GitCode Webhook 自动部署接收入口
*/
// 响应头部
header('Content-Type: application/json; charset=utf-8');
// Webhook 密钥 Token
$secret = 'xiongge_deploy_webhook_2026';
// 项目根目录与部署脚本
$rootDir = dirname(__DIR__);
$deployScript = $rootDir . '/deploy.sh';
$logFile = $rootDir . '/runtime/webhook.log';
// 加载核心处理类
require_once $rootDir . '/application/common/library/WebhookHandler.php';
$deployExecutor = function (array $payload) use ($deployScript, $rootDir) {
$branch = str_replace('refs/heads/', '', $payload['ref'] ?? 'master');
// 以 bash 执行部署脚本,并捕获标准输出与错误输出
$cmd = "bash " . escapeshellarg($deployScript) . " " . escapeshellarg($branch) . " 2>&1";
$output = shell_exec($cmd);
return trim($output ?? '');
};
$handler = new \app\common\library\WebhookHandler($secret, 'master', $deployExecutor);
$rawBody = file_get_contents('php://input') ?: '';
$result = $handler->handle($_SERVER, $_GET, $rawBody);
// 记录审计日志
$date = date('Y-m-d H:i:s');
$ip = $_SERVER['REMOTE_ADDR'] ?? 'UNKNOWN';
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
$status = $result['data']['status'] ?? 'unknown';
$msg = $result['data']['message'] ?? '';
$out = $result['data']['output'] ?? '';
$logEntry = "[{$date}] [{$ip}] {$method} => Status: {$status}, Msg: {$msg}";
if (!empty($out)) {
$logEntry .= "\nDeploy Output:\n" . $out;
}
$logEntry .= "\n" . str_repeat('-', 50) . "\n";
@file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
http_response_code($result['code']);
echo json_encode($result['data'], JSON_UNESCAPED_UNICODE);