fix(deploy): 系统更新 - 非正式镜像标签可在线更新到正式版

sha-* 等非正式标签不再被字典序判成比 vX.Y.Z 更新;健康检查对非正式目标版本只确认服务就绪;管理后台更新页并排展示当前运行与最新发布版本并标注非正式版本
This commit is contained in:
ddCat
2026-09-18 08:50:18 +08:00
parent 8d99e0adbb
commit 7d3f4ffc50
8 changed files with 99 additions and 11 deletions

View File

@@ -178,7 +178,7 @@ export default function SystemUpdatePage() {
layout="stacked"
icon={<ServerCog className="size-4" />}
title="可用版本"
description={status?.updateAvailable ? "发现比当前运行版本更新的发布构建。" : "检查 GitHub Release 与当前运行版本。"}
description={status?.updateAvailable ? `当前运行 ${status.currentVersion},可更新到 ${status.latestRelease?.version}。` : "检查 GitHub Release 与当前运行的镜像标签。"}
status={<PhaseBadge phase={status?.operation.phase ?? "idle"} />}
footer={
<>
@@ -190,12 +190,27 @@ export default function SystemUpdatePage() {
}
>
<div className="admin-system-update-release-body">
<div className="admin-system-update-version-row">
<strong>{status?.latestRelease?.version || "尚未检查"}</strong>
{status?.latestRelease?.prerelease ? <AdminStatusBadge label="预览版" tone="warning" /> : null}
<div className="admin-system-update-versions">
<div>
<span>当前运行</span>
<strong>{status?.currentVersion || "未识别"}</strong>
{status?.currentVersion && !isReleaseVersion(status.currentVersion) ? <AdminStatusBadge label="非正式版本" tone="warning" /> : null}
</div>
<div>
<span>最新发布</span>
<strong>{status?.latestRelease?.version || "尚未检查"}</strong>
{status?.latestRelease?.prerelease ? <AdminStatusBadge label="预览版" tone="warning" /> : null}
{status?.updateAvailable ? <AdminStatusBadge label="可更新" tone="success" /> : null}
</div>
</div>
{status?.updateAvailable && status.latestRelease ? (
<p className="admin-system-update-hint">
{isReleaseVersion(status.currentVersion)
? `可以从 ${status.currentVersion} 更新到 ${status.latestRelease.version}。`
: `当前镜像标签不是正式版本号,所以会显示成 ${status.currentVersion}。点开始更新后会切换到 ${status.latestRelease.version}。`}
</p>
) : null}
<dl className="admin-system-update-facts">
<dt>当前版本</dt><dd>{status?.currentVersion || "未识别"}</dd>
<dt>部署方式</dt><dd>{status?.deployment || "未知"}</dd>
<dt>发布时间</dt><dd>{formatDate(status?.latestRelease?.publishedAt)}</dd>
<dt>代码仓库</dt><dd>{status?.repository || "ddcat-ai/open-ai-canvas"}</dd>
@@ -282,3 +297,7 @@ function formatBytes(value: number) {
const index = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);
return `${(value / 1024 ** index).toFixed(index > 1 ? 2 : 0)} ${units[index]}`;
}
function isReleaseVersion(value?: string) {
return Boolean(value && /^v?\d+\.\d+\.\d+/.test(value));
}

View File

@@ -9980,6 +9980,42 @@ html[data-magicui-theme-vt="active"] .admin-shell * {
padding: 16px;
}
.admin-system-update-versions {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px 18px;
padding-bottom: 14px;
}
.admin-system-update-versions > div {
display: flex;
min-width: 0;
flex-wrap: wrap;
align-items: baseline;
gap: 8px;
}
.admin-system-update-versions span {
width: 100%;
color: var(--admin-text-muted);
font-size: 11px;
font-weight: 600;
}
.admin-system-update-versions strong {
font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
font-size: clamp(18px, 2.4vw, 26px);
line-height: 1.1;
letter-spacing: -0.04em;
}
.admin-system-update-hint {
margin: 0 0 14px;
color: var(--admin-text-secondary, var(--admin-text-muted));
font-size: 12px;
line-height: 1.65;
}
.admin-system-update-version-row {
display: flex;
align-items: center;