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