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.

remove auth middleware

+14 -3
+10 -2
pkg/appview/db/stats_migration.go
··· 143 143 slog.Info("Stats migration completed", "component", "migration", 144 144 "success", successCount, "skipped", skipCount, "errors", errorCount, "total", len(stats)) 145 145 146 - // Mark migration complete (even if some failed - they'll get updates via Jetstream) 147 - return markMigrationComplete(db) 146 + // Only mark complete if there were no errors 147 + // Skipped repos (no hold DID) will never migrate - that's fine 148 + // Errors are transient failures that should be retried 149 + if errorCount == 0 { 150 + return markMigrationComplete(db) 151 + } 152 + 153 + slog.Warn("Stats migration had errors, will retry on next startup", "component", "migration", 154 + "errors", errorCount) 155 + return nil 148 156 } 149 157 150 158 // markMigrationComplete records that the stats migration has been done
+4 -1
pkg/hold/oci/xrpc.go
··· 40 40 41 41 // RegisterHandlers registers all OCI XRPC endpoints with the chi router 42 42 func (h *XRPCHandler) RegisterHandlers(r chi.Router) { 43 + // Temporary migration endpoint - no auth required 44 + // TODO: Remove after stats migration is complete 45 + r.Post(atproto.HoldSetStats, h.HandleSetStats) 46 + 43 47 // All multipart upload endpoints require blob:write permission 44 48 r.Group(func(r chi.Router) { 45 49 r.Use(h.requireBlobWriteAccess) ··· 50 54 r.Post(atproto.HoldCompleteUpload, h.HandleCompleteUpload) 51 55 r.Post(atproto.HoldAbortUpload, h.HandleAbortUpload) 52 56 r.Post(atproto.HoldNotifyManifest, h.HandleNotifyManifest) 53 - r.Post(atproto.HoldSetStats, h.HandleSetStats) 54 57 }) 55 58 } 56 59