Release rolling / release (push) Has been cancelled
Registry HTTP now sets host/hostname, disables keep-alive, and times out cleanly; resolve container image tags/digests more reliably and surface check errors in the UI.
71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
import test from 'brittle'
|
|
import {
|
|
parseImageRef,
|
|
normalizeDigest,
|
|
digestsFromInspect,
|
|
preferredRepoTag,
|
|
} from '../server/services/image-updates.js'
|
|
|
|
test('parseImageRef handles Docker Hub short names', (t) => {
|
|
const r = parseImageRef('nginx:alpine')
|
|
t.ok(r)
|
|
t.is(r.registry, 'registry-1.docker.io')
|
|
t.is(r.repository, 'library/nginx')
|
|
t.is(r.tag, 'alpine')
|
|
t.ok(r.isOfficial)
|
|
t.absent(r.isPinned)
|
|
})
|
|
|
|
test('parseImageRef handles user/repo on Hub', (t) => {
|
|
const r = parseImageRef('library/redis:7')
|
|
t.is(r.repository, 'library/redis')
|
|
t.is(r.tag, '7')
|
|
t.is(r.host, 'docker.io')
|
|
})
|
|
|
|
test('parseImageRef handles ghcr and custom registries', (t) => {
|
|
const g = parseImageRef('ghcr.io/org/app:1.2.3')
|
|
t.is(g.registry, 'ghcr.io')
|
|
t.is(g.repository, 'org/app')
|
|
t.is(g.tag, '1.2.3')
|
|
|
|
const c = parseImageRef('registry.example.com:5000/ns/img:v2')
|
|
t.is(c.registry, 'registry.example.com:5000')
|
|
t.is(c.repository, 'ns/img')
|
|
t.is(c.tag, 'v2')
|
|
})
|
|
|
|
test('parseImageRef digests and bare ids', (t) => {
|
|
const pinned = parseImageRef('nginx@sha256:abc123')
|
|
t.ok(pinned.isPinned)
|
|
t.is(pinned.digest, 'sha256:abc123')
|
|
|
|
t.is(parseImageRef('sha256:deadbeef'), null)
|
|
t.is(parseImageRef('a1b2c3d4e5f6'), null)
|
|
t.is(parseImageRef(''), null)
|
|
t.is(parseImageRef('<none>:<none>'), null)
|
|
})
|
|
|
|
test('parseImageRef defaults tag to latest', (t) => {
|
|
const r = parseImageRef('postgres')
|
|
t.is(r.tag, 'latest')
|
|
t.is(r.repository, 'library/postgres')
|
|
})
|
|
|
|
test('normalizeDigest and digestsFromInspect', (t) => {
|
|
t.is(normalizeDigest('sha256:abc'), 'sha256:abc')
|
|
t.is(normalizeDigest('abc'), 'sha256:abc')
|
|
t.is(normalizeDigest(''), null)
|
|
|
|
const digests = digestsFromInspect({
|
|
RepoDigests: [
|
|
'nginx@sha256:1111111111111111111111111111111111111111111111111111111111111111',
|
|
'docker.io/library/nginx@sha256:2222222222222222222222222222222222222222222222222222222222222222',
|
|
],
|
|
})
|
|
t.is(digests.length, 2)
|
|
t.ok(digests[0].startsWith('sha256:'))
|
|
t.is(preferredRepoTag({ RepoTags: ['<none>:<none>', 'nginx:alpine'] }), 'nginx:alpine')
|
|
t.is(preferredRepoTag({ RepoTags: [] }), null)
|
|
})
|