A container registry that uses the AT Protocol for manifest storage and S3 for blob storage. atcr.io
docker container atproto go
80
fork

Configure Feed

Select the types of activity you want to include in your feed.

add helm badge to tags

+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 }}