🌳
pt0/deployF/dockerF/dockRegErrorsAI.mts
2const getErrorStringWithLogs = (err: unknown): string => {
3 const errStr = String(err)
4 const e = err as any
5 const logs = e?.uniqDebugH?.logs || ''
6 const spawnOut = [e?.dumpDebugH?.stdout, e?.dumpDebugH?.stderr].filter(Boolean).join('\n')
7 return errStr + '\n' + logs + '\n' + spawnOut
8}
10export const isRegistryDiskFullError = (err: unknown): boolean => {
11 const combined = getErrorStringWithLogs(err)
12 // Kaniko error format: "Err:28" (POSIX ENOSPC)
13 if (combined.includes('Err:28')) return true
14 // Generic disk full messages
15 if (combined.includes('no space left on device')) return true
16 if (combined.includes('ENOSPC')) return true
17 // Docker registry specific
18 if (combined.includes('UNKNOWN: unknown error') && combined.includes('mkdir')) return true
19 // zot returns 500 on ENOSPC; docker client surfaces the lost upload session, not "no space"
20 if (combined.includes('blob upload unknown') || combined.includes('blob upload invalid')) return true
21 return false
24export const isRegistryNotFoundError = (err: unknown): boolean => {
25 const combined = getErrorStringWithLogs(err)
26 // Nginx 404 when registry deployment doesn't exist
27 if (combined.includes('404 Not Found')) return true
28 if (combined.includes('unexpected status code 404')) return true
29 // Registry API not available
30 if (combined.includes('connection refused')) return true
31 if (combined.includes('no such host')) return true
32 return false
35export const parseKanikoFailure = (logs: string): {hint: string} | null => {
36 if (logs.includes('Err:28') || logs.includes('no space left on device') || logs.includes('ENOSPC')) {
37 return {hint: 'Docker registry disk full — run `ptnode <registry-ep> --steps=dockreg gc`'}
38 }
39 if (logs.includes('ENOENT') && logs.includes('.pnpm-store')) {
40 return {hint: 'pnpm-store cache corruption — delete the kanikocache PVC and retry: ptnode <cluster-epCli> <cluster> delete pvc kanikocache-localctx'}
41 }
42 // Auth failures
43 if (logs.includes('UNAUTHORIZED') || logs.includes('401')) {
44 return {hint: 'Docker registry authentication failed - check regcred secret'}
45 }
46 // Network issues
47 if (logs.includes('connection refused') || logs.includes('no such host')) {
48 return {hint: 'Docker registry unreachable - check network/DNS'}
49 }
50 return null