69 lines
2.5 KiB
PHP
69 lines
2.5 KiB
PHP
<?php
|
||
|
||
namespace App\Console\Commands;
|
||
|
||
use App\Services\GitMonitorService;
|
||
use Illuminate\Console\Command;
|
||
|
||
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'])) {
|
||
$this->error(sprintf('[%s] %s', $repo, $result['error']));
|
||
continue;
|
||
}
|
||
|
||
$this->line(sprintf(
|
||
'[%s] 分支 %s 已对齐 %s,扫描 %d 个提交。',
|
||
$repo,
|
||
$result['branch'],
|
||
$result['head'],
|
||
$result['commits_scanned']
|
||
));
|
||
|
||
if (!empty($result['issues']['develop_merges'])) {
|
||
$this->warn(sprintf(' - 检测到 %d 个 develop merge:', count($result['issues']['develop_merges'])));
|
||
foreach ($result['issues']['develop_merges'] as $commit) {
|
||
$this->warn(sprintf(
|
||
' • %s %s (%s)',
|
||
substr($commit['hash'], 0, 8),
|
||
$commit['subject'],
|
||
$commit['author']
|
||
));
|
||
}
|
||
}
|
||
|
||
if (!empty($result['issues']['missing_functions'])) {
|
||
$this->warn(sprintf(' - 检测到 %d 个疑似缺失函数的提交:', count($result['issues']['missing_functions'])));
|
||
foreach ($result['issues']['missing_functions'] as $issue) {
|
||
$this->warn(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));
|
||
$this->warn(sprintf(' %s => %s', $detail['file'], $functions));
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|