#feature: add AI log analysis & some bugfix

This commit is contained in:
2026-01-14 13:58:50 +08:00
parent e479ed02ea
commit ae6c169f5f
33 changed files with 3898 additions and 164 deletions

View File

@@ -758,9 +758,13 @@ class JiraService
}
/**
* 获取最近的 release 版本
* 获取下一个 release 版本
* 根据当前版本号,在 Jira 版本列表中找到下一个版本
*
* @param string $projectKey Jira 项目 key
* @param string|null $currentVersion 当前版本号(来自 master 分支的 version.txt
*/
public function getUpcomingReleaseVersion(string $projectKey): ?array
public function getUpcomingReleaseVersion(string $projectKey, ?string $currentVersion = null): ?array
{
try {
$versions = $this->projectService->getVersions($projectKey);
@@ -772,23 +776,66 @@ class JiraService
return null;
}
$now = Carbon::now()->startOfDay();
// 按版本名称排序(假设版本号格式一致,如 1.0.0, 1.0.1, 1.1.0
$sortedVersions = collect($versions)
->filter(fn($version) => !empty($version->name))
->sortBy(fn($version) => $version->name, SORT_NATURAL)
->values();
$candidate = collect($versions)
->filter(function ($version) use ($now) {
if (($version->released ?? false) || empty($version->releaseDate)) {
return false;
}
if ($sortedVersions->isEmpty()) {
return null;
}
try {
return Carbon::parse($version->releaseDate)->greaterThanOrEqualTo($now);
} catch (\Throwable) {
return false;
}
})
->sortBy(function ($version) {
return Carbon::parse($version->releaseDate);
})
// 如果没有提供当前版本,返回第一个未发布的版本
if (empty($currentVersion)) {
$candidate = $sortedVersions
->filter(fn($version) => !($version->released ?? false))
->first();
if (!$candidate) {
return null;
}
return [
'version' => $candidate->name,
'release_date' => !empty($candidate->releaseDate)
? Carbon::parse($candidate->releaseDate)->toDateString()
: null,
];
}
// 找到当前版本在列表中的位置,返回下一个版本
$currentIndex = $sortedVersions->search(
fn($version) => $version->name === $currentVersion
);
// 如果找不到当前版本,尝试找到第一个大于当前版本的未发布版本
if ($currentIndex === false) {
$candidate = $sortedVersions
->filter(function ($version) use ($currentVersion) {
if ($version->released ?? false) {
return false;
}
return version_compare($version->name, $currentVersion, '>');
})
->first();
if (!$candidate) {
return null;
}
return [
'version' => $candidate->name,
'release_date' => !empty($candidate->releaseDate)
? Carbon::parse($candidate->releaseDate)->toDateString()
: null,
];
}
// 从当前版本的下一个开始,找到第一个未发布的版本
$candidate = $sortedVersions
->slice($currentIndex + 1)
->filter(fn($version) => !($version->released ?? false))
->first();
if (!$candidate) {
@@ -797,7 +844,9 @@ class JiraService
return [
'version' => $candidate->name,
'release_date' => Carbon::parse($candidate->releaseDate)->toDateString(),
'release_date' => !empty($candidate->releaseDate)
? Carbon::parse($candidate->releaseDate)->toDateString()
: null,
];
}
}