From ceb0dbcd11691238ca2290e50241f5d46cefa943 Mon Sep 17 00:00:00 2001 From: Guy Owen Date: Fri, 8 May 2026 12:13:21 +1000 Subject: [PATCH] Fixed error handling for csv output. --- cmd/project-metadata/metadata.go | 36 +++++++++++++++++++------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/cmd/project-metadata/metadata.go b/cmd/project-metadata/metadata.go index 2ea24b6..37fd033 100644 --- a/cmd/project-metadata/metadata.go +++ b/cmd/project-metadata/metadata.go @@ -206,25 +206,31 @@ func Metadata(ctx context.Context, c *cli.Command) error { if err != nil { facts["status"] = fmt.Sprintf("Unable to marshal response: %v", err) } else { - var projectResponse ProjectByNameResponse - err = json.Unmarshal(responseBytes, &projectResponse) - if err != nil { - facts["status"] = fmt.Sprintf("Unable to parse response: %v", err) + // Check if the response looks like HTML (error page) + responseStr := string(responseBytes) + if strings.HasPrefix(responseStr, "\"<") || strings.Contains(responseStr, " 0 { - for _, env := range projectResponse.ProjectByName.Environments { - for _, fact := range env.Facts { - if fact.Name != "" && fact.Value != "" { - facts[fact.Name] = fact.Value + var projectResponse ProjectByNameResponse + err = json.Unmarshal(responseBytes, &projectResponse) + if err != nil { + facts["status"] = fmt.Sprintf("Unable to parse response: %v", err) + } else { + // Extract facts from production environments + if len(projectResponse.ProjectByName.Environments) > 0 { + for _, env := range projectResponse.ProjectByName.Environments { + for _, fact := range env.Facts { + if fact.Name != "" && fact.Value != "" { + facts[fact.Name] = fact.Value + } } } + if len(facts) == 0 { + facts["status"] = "No facts available for production environment" + } + } else { + facts["status"] = "No production environment found" } - if len(facts) == 0 { - facts["status"] = "No facts available for production environment" - } - } else { - facts["status"] = "No production environment found" } } }