forked from boos/BoosAPI
fix: detect latest digest updates in update center (#344)
This commit is contained in:
@@ -34,10 +34,18 @@ function normalizeStableTag(value?: string | null): string {
|
||||
return normalizeStableVersion(value);
|
||||
}
|
||||
|
||||
function hasSameStableTag(left?: string | null, right?: string | null): boolean {
|
||||
const normalizedLeft = normalizeStableTag(left);
|
||||
const normalizedRight = normalizeStableTag(right);
|
||||
return !!normalizedLeft && normalizedLeft === normalizedRight;
|
||||
function hasSameImageTag(left?: string | null, right?: string | null): boolean {
|
||||
const rawLeft = normalizeString(left);
|
||||
const rawRight = normalizeString(right);
|
||||
if (!rawLeft || !rawRight) return false;
|
||||
|
||||
const stableLeft = normalizeStableTag(left);
|
||||
const stableRight = normalizeStableTag(right);
|
||||
if (stableLeft && stableRight) {
|
||||
return stableLeft === stableRight;
|
||||
}
|
||||
|
||||
return rawLeft === rawRight;
|
||||
}
|
||||
|
||||
export function normalizeStableVersion(value?: string | null): string {
|
||||
@@ -76,7 +84,7 @@ export function isSameImageTarget(
|
||||
return currentDigest === targetDigest;
|
||||
}
|
||||
|
||||
return hasSameStableTag(current?.imageTag, target.tag);
|
||||
return hasSameImageTag(current?.imageTag, target.tag);
|
||||
}
|
||||
|
||||
export function buildUpdateReminderCandidateKey(
|
||||
@@ -138,7 +146,7 @@ export function resolveUpdateReminderCandidate(input: {
|
||||
}
|
||||
|
||||
const helperDigest = normalizeDigest(input.helper?.imageDigest);
|
||||
if (dockerDigest && helperDigest && hasSameStableTag(input.helper?.imageTag, dockerTag) && helperDigest !== dockerDigest) {
|
||||
if (dockerDigest && helperDigest && hasSameImageTag(input.helper?.imageTag, dockerTag) && helperDigest !== dockerDigest) {
|
||||
return {
|
||||
source: 'docker-hub-tag',
|
||||
kind: 'new-digest',
|
||||
|
||||
@@ -73,6 +73,27 @@ describe('updateCenterReminder shared logic', () => {
|
||||
}));
|
||||
});
|
||||
|
||||
it('treats alias tags like latest as digest-tracked targets when the digest changes', () => {
|
||||
expect(resolveUpdateReminderCandidate({
|
||||
currentVersion: '1.2.3',
|
||||
helper: {
|
||||
imageTag: 'latest',
|
||||
imageDigest: 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
},
|
||||
githubRelease: null,
|
||||
dockerHubTag: {
|
||||
normalizedVersion: 'latest',
|
||||
displayVersion: 'latest @ sha256:bbbbbbbbbbbb',
|
||||
tagName: 'latest',
|
||||
digest: 'sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
},
|
||||
})).toEqual(expect.objectContaining({
|
||||
source: 'docker-hub-tag',
|
||||
kind: 'new-digest',
|
||||
candidateKey: 'docker-hub-tag:latest@sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
}));
|
||||
});
|
||||
|
||||
it('does not return an older GitHub candidate when the helper is already ahead of it', () => {
|
||||
expect(resolveUpdateReminderCandidate({
|
||||
currentVersion: '1.2.3',
|
||||
|
||||
@@ -61,6 +61,27 @@ describe('updateCenterPresentation', () => {
|
||||
expect(state.canDeploy).toBe(true);
|
||||
});
|
||||
|
||||
it('treats alias tags like latest as a new digest deploy target when the digest changes', () => {
|
||||
const state = describeDockerDeployState({
|
||||
enabled: true,
|
||||
helperHealthy: true,
|
||||
currentVersion: '1.2.3',
|
||||
helper: {
|
||||
imageTag: 'latest',
|
||||
imageDigest: 'sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
},
|
||||
candidate: {
|
||||
normalizedVersion: 'latest',
|
||||
tagName: 'latest',
|
||||
digest: 'sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
},
|
||||
});
|
||||
|
||||
expect(state.kind).toBe('new-digest');
|
||||
expect(state.canDeploy).toBe(true);
|
||||
expect(state.badgeLabel).toBe('发现新 digest');
|
||||
});
|
||||
|
||||
it('does not advertise an older GitHub reminder when the helper is already ahead', () => {
|
||||
expect(buildUpdateReminder({
|
||||
currentVersion: '1.2.3',
|
||||
|
||||
Reference in New Issue
Block a user