#feature: add AI log analysis & some bugfix
This commit is contained in:
@@ -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,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user