From c1d8c04e31b8f399b53afafb863601e974d6310c Mon Sep 17 00:00:00 2001 From: Terry Howe Date: Sat, 24 May 2025 09:58:45 -0600 Subject: [PATCH] fix: ignore empty credentials files for v3 Signed-off-by: Terry Howe --- pkg/registry/client.go | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/pkg/registry/client.go b/pkg/registry/client.go index 48adb42b4..11018c8d5 100644 --- a/pkg/registry/client.go +++ b/pkg/registry/client.go @@ -115,13 +115,29 @@ func NewClient(options ...ClientOption) (*Client, error) { } store, err := credentials.NewStore(client.credentialsFile, storeOptions) if err != nil { - return nil, err + fileInfo, fileErr := os.Stat(client.credentialsFile) + if fileErr != nil { + // Actual problem reading file + return nil, err + } + if fileInfo.Size() != 0 { + // Likely a parse error + return nil, err + } + + fileErr = os.WriteFile(client.credentialsFile, []byte("{}"), 0600) + if fileErr != nil { + return nil, err + } + + store, fileErr = credentials.NewStore(client.credentialsFile, storeOptions) + if fileErr != nil { + return nil, err + } } + client.credentialsStore = store dockerStore, err := credentials.NewStoreFromDocker(storeOptions) - if err != nil { - // should only fail if user home directory can't be determined - client.credentialsStore = store - } else { + if err == nil { // use Helm credentials with fallback to Docker client.credentialsStore = credentials.NewStoreWithFallbacks(store, dockerStore) }