@@ -40,6 +40,11 @@ CREATE TABLE IF NOT EXISTS settings (
4040 key TEXT PRIMARY KEY,
4141 value TEXT
4242);
43+ CREATE TABLE IF NOT EXISTS image_versions (
44+ digest TEXT PRIMARY KEY,
45+ version TEXT NOT NULL,
46+ updated_at TEXT DEFAULT (datetime('now'))
47+ );
4348CREATE INDEX IF NOT EXISTS idx_events_ref ON update_events(normalized_ref, resolved);
4449CREATE INDEX IF NOT EXISTS idx_history_created ON update_history(created_at DESC);
4550` ) ;
@@ -75,6 +80,14 @@ const stmts = {
7580 UPDATE update_events SET available_version = ?
7681 WHERE normalized_ref = ? AND digest = ? AND resolved = 0
7782 ` ) ,
83+ setImageVersion : db . prepare ( `
84+ INSERT INTO image_versions (digest, version, updated_at)
85+ VALUES (?, ?, datetime('now'))
86+ ON CONFLICT(digest) DO UPDATE SET version = excluded.version, updated_at = excluded.updated_at
87+ ` ) ,
88+ getImageVersion : db . prepare ( `
89+ SELECT version FROM image_versions WHERE digest = ? LIMIT 1
90+ ` ) ,
7891 recordUpdate : db . prepare ( `
7992 INSERT INTO update_history (container_name, image, old_digest, new_digest, status, message)
8093 VALUES (@container_name, @image, @old_digest, @new_digest, @status, @message)
@@ -147,6 +160,22 @@ export function updateEventAvailableVersion(normalized_ref, digest, available_ve
147160 return stmts . updateEventAvailableVersion . run ( available_version ?? null , normalized_ref , digest ) ;
148161}
149162
163+ /**
164+ * Remember a human-readable version for a specific image digest, so the
165+ * dashboard can show a real version number even for images whose own labels
166+ * are junk (e.g. `:latest` + `org.opencontainers.image.version=main`).
167+ */
168+ export function setImageVersion ( digest , version ) {
169+ if ( ! digest || ! version ) return undefined ;
170+ return stmts . setImageVersion . run ( digest , version ) ;
171+ }
172+
173+ export function getImageVersion ( digest ) {
174+ if ( ! digest ) return null ;
175+ const row = stmts . getImageVersion . get ( digest ) ;
176+ return row ? row . version : null ;
177+ }
178+
150179export function recordUpdate ( { container_name, image, old_digest, new_digest, status, message } ) {
151180 return stmts . recordUpdate . run ( {
152181 container_name,
0 commit comments