fix(auto-update): label same-tag rebuilds as 'Rebuild available' instead of '10.11 -> 10.11' (#766)

When a registry pushes a new build of an image at the same tag (digest
changes, tag does not), the preview service set next_tag to the same
string as current_tag and the readiness view rendered '10.11 -> 10.11',
which reads as a UI bug.

Add an update_kind field to UpdatePreviewSummary that distinguishes:
- 'tag'    - at least one image has a strictly newer tag
- 'digest' - the only updates available are same-tag rebuilds
- 'none'   - nothing to apply

The frontend now branches on update_kind and renders 'Rebuild available'
next to the current tag for the digest case, leaving the version-arrow
diff for genuine tag bumps.

Three new buildSummary cases lock in the kind classification.
This commit is contained in:
Anso
2026-04-24 23:37:32 -04:00
committed by GitHub
parent 9e0f521ea8
commit 584cda7182
3 changed files with 53 additions and 4 deletions
@@ -19,6 +19,8 @@ interface UpdatePreviewImage {
semver_bump: SemverBump;
}
type UpdateKind = 'tag' | 'digest' | 'none';
interface UpdatePreview {
stack_name: string;
images: UpdatePreviewImage[];
@@ -28,6 +30,7 @@ interface UpdatePreview {
current_tag: string | null;
next_tag: string | null;
semver_bump: SemverBump;
update_kind: UpdateKind;
blocked: boolean;
blocked_reason: string | null;
};
@@ -160,10 +163,19 @@ function StackReadinessCard({
const blockedReason = p.summary.blocked_reason;
return (
<>
<VersionDiff
current={p.summary.current_tag}
next={p.summary.next_tag}
/>
{p.summary.update_kind === 'digest' ? (
<div className="flex items-baseline gap-2 font-mono text-sm">
<span className="text-stat-subtitle">{p.summary.current_tag}</span>
<span className="text-brand text-[11px] uppercase tracking-[0.16em]">
Rebuild available
</span>
</div>
) : (
<VersionDiff
current={p.summary.current_tag}
next={p.summary.next_tag}
/>
)}
<div className="flex items-center gap-1.5 font-mono text-[11px] text-stat-subtitle/80">
<span>{p.summary.primary_image ?? '-'}</span>