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

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

evan.jarrett.net e97e51a5 045aeb2d

verified
Changed files
+3 -4
pkg
appview
middleware
+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)