A container registry that uses the AT Protocol for manifest storage and S3 for blob storage.

add helm badge to tags

evan.jarrett.net 6dd612e1 84866f5e

verified
+30 -2
+20
pkg/appview/static/css/style.css
··· 1569 1569 margin-left: 0.5rem; 1570 1570 } 1571 1571 1572 + /* Helm chart badge */ 1573 + .badge-helm { 1574 + display: inline-flex; 1575 + align-items: center; 1576 + gap: 0.25rem; 1577 + padding: 0.25rem 0.6rem; 1578 + font-size: 0.75rem; 1579 + font-weight: 600; 1580 + border-radius: 12px; 1581 + background: #0f1689; 1582 + color: #fff; 1583 + white-space: nowrap; 1584 + margin-left: 0.5rem; 1585 + } 1586 + 1587 + .badge-helm svg { 1588 + width: 12px; 1589 + height: 12px; 1590 + } 1591 + 1572 1592 .platform-badge { 1573 1593 display: inline-flex; 1574 1594 align-items: center;
+7 -1
pkg/appview/storage/manifest_store.go
··· 92 92 } 93 93 } 94 94 95 + // Determine media type - prefer record field, fallback to blob mimeType for old records 96 + mediaType := manifestRecord.MediaType 97 + if mediaType == "" && manifestRecord.ManifestBlob != nil { 98 + mediaType = manifestRecord.ManifestBlob.MimeType 99 + } 100 + 95 101 // Parse the manifest based on media type 96 102 // For now, we'll return the raw bytes wrapped in a manifest object 97 103 // In a full implementation, you'd use distribution's manifest parsing 98 104 return &rawManifest{ 99 - mediaType: manifestRecord.MediaType, 105 + mediaType: mediaType, 100 106 payload: ociManifest, 101 107 }, nil 102 108 }
+3 -1
pkg/appview/templates/pages/repository.html
··· 146 146 <div class="tag-item-header"> 147 147 <div> 148 148 <span class="tag-name-large">{{ .Tag.Tag }}</span> 149 - {{ if .IsMultiArch }} 149 + {{ if eq .ArtifactType "helm-chart" }} 150 + <span class="badge-helm"><i data-lucide="anchor"></i> Helm</span> 151 + {{ else if .IsMultiArch }} 150 152 <span class="badge-multi">Multi-arch</span> 151 153 {{ end }} 152 154 {{ if .HasAttestations }}