Files
toolbox/app/Console/Commands/GitMonitorCheckCommand.php
2026-01-19 15:42:44 +08:00

70 lines
2.7 KiB
PHP

<?php
namespace App\Console\Commands;
use App\Services\GitMonitorService;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Log;
class GitMonitorCheckCommand extends Command
{
protected $signature = 'git-monitor:check
{--force-cache : 强制从 JIRA 刷新 release 缓存后再检查}';
protected $description = '巡检 release 分支是否包含 develop merge 或因为冲突导致的函数缺失';
public function handle(GitMonitorService $monitor): void
{
if ($this->option('force-cache')) {
$monitor->refreshReleaseCache(true);
} else {
$monitor->ensureReleaseCache();
}
$results = $monitor->checkRepositories(false);
foreach ($results as $repo => $result) {
if (isset($result['error'])) {
Log::channel('git-monitor')->error(sprintf('[%s] %s', $repo, $result['error']));
continue;
}
Log::channel('git-monitor')->info(sprintf(
'[%s] 分支 %s 已对齐 %s,扫描 %d 个提交。',
$repo,
$result['branch'],
$result['head'],
$result['commits_scanned']
));
if (!empty($result['issues']['develop_merges'])) {
Log::channel('git-monitor')->warning(sprintf(' - 检测到 %d 个 develop merge:', count($result['issues']['develop_merges'])));
foreach ($result['issues']['develop_merges'] as $commit) {
Log::channel('git-monitor')->warning(sprintf(
' • %s %s (%s)',
substr($commit['hash'], 0, 8),
$commit['subject'],
$commit['author']
));
}
}
if (!empty($result['issues']['missing_functions'])) {
Log::channel('git-monitor')->warning(sprintf(' - 检测到 %d 个疑似缺失函数的提交:', count($result['issues']['missing_functions'])));
foreach ($result['issues']['missing_functions'] as $issue) {
Log::channel('git-monitor')->warning(sprintf(
' • %s %s (%s)',
substr($issue['commit']['hash'], 0, 8),
$issue['commit']['subject'],
$issue['commit']['author']
));
foreach ($issue['details'] as $detail) {
$functions = implode(', ', array_slice($detail['functions'], 0, 5));
Log::channel('git-monitor')->warning(sprintf(' %s => %s', $detail['file'], $functions));
}
}
}
}
}
}