([]);
const [taskStatus, setTaskStatus] = useState('');
const [historyModalOpen, setHistoryModalOpen] = useState(false);
@@ -426,6 +430,13 @@ export default function UpdateCenterSection() {
});
const canDeployGithub = !deploying && githubDeployState.canDeploy;
const canDeployDocker = !deploying && dockerDeployState.canDeploy;
+ const manualDockerTag = String(manualDockerTarget.tag || '').trim();
+ const manualDockerDigest = String(manualDockerTarget.digest || '').trim();
+ const canDeployManualDocker = !deploying
+ && config.enabled
+ && config.dockerHubTagsEnabled
+ && helperHealthy
+ && !!manualDockerTag;
const helperHistory = Array.isArray(status?.helper?.history) ? status.helper.history : [];
const historyPreview = helperHistory.slice(0, 2);
const currentRevision = String(status?.helper?.revision || '').trim();
@@ -559,7 +570,7 @@ export default function UpdateCenterSection() {
/>
Docker Hub
- 从镜像标签中找出最新稳定版本,适合镜像优先的发布链路。
+ 自动发现优先稳定标签;dev / 分支 / 临时标签可在下方手动部署。
@@ -720,7 +731,7 @@ export default function UpdateCenterSection() {
) : null}
- 适合镜像标签领先于 release 的场景,直接跟随容器分发节奏。
+ 自动候选优先 latest / main / 稳定 SemVer;dev / 分支 / sha 标签可手动填写部署。
{status?.dockerHubTag?.displayVersion || status?.dockerHubTag?.normalizedVersion || '未发现'}
@@ -730,21 +741,87 @@ export default function UpdateCenterSection() {
最近推送:{formatTaskTime(status?.dockerHubTag?.publishedAt)}
-
+
+
+ {status?.dockerHubTag?.tagName ? (
+
+ ) : null}
+
+
+
+ 手动部署 Docker Hub 标签
+
+
+ 自动候选不会覆盖所有分支标签。若要切到 dev、feature、临时或 sha 标签,直接在这里填写。
+
+
+ setManualDockerTarget((prev) => ({ ...prev, tag: e.target.value }))}
+ style={{ ...inputStyle, fontFamily: 'var(--font-mono)' }}
+ placeholder="dev / dev-20260417-f67ade2 / sha-f67ade2"
+ />
+ setManualDockerTarget((prev) => ({ ...prev, digest: e.target.value }))}
+ style={{ ...inputStyle, fontFamily: 'var(--font-mono)' }}
+ placeholder="可选 digest:sha256:..."
+ />
+
+
+
+
+ digest 选填;如果 chart 当前锁定了旧 digest,建议把 tag 和 digest 一起填写。
+
+
+