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.

don't run ensure in background in case of first push

+3 -4
+3 -4
pkg/appview/middleware/registry.go
··· 293 293 // Auto-reconcile crew membership on first push/pull 294 294 // This ensures users can push immediately after docker login without web sign-in 295 295 // EnsureCrewMembership is best-effort and logs errors without failing the request 296 - // Run in background to avoid blocking registry operations if hold is offline 296 + // Run synchronously to ensure crew record exists before write access checks 297 + // (returns quickly if already a member - hold returns 200/201) 297 298 if holdDID != "" && nr.refresher != nil { 298 299 slog.Debug("Auto-reconciling crew membership", "component", "registry/middleware", "did", did, "hold_did", holdDID) 299 300 client := atproto.NewClient(pdsEndpoint, did, "") 300 - go func(ctx context.Context, client *atproto.Client, refresher *oauth.Refresher, holdDID string) { 301 - storage.EnsureCrewMembership(ctx, client, refresher, holdDID) 302 - }(ctx, client, nr.refresher, holdDID) 301 + storage.EnsureCrewMembership(ctx, client, nr.refresher, holdDID) 303 302 } 304 303 305 304 // Get service token for hold authentication (only if authenticated)