From cd83c963a1b82c33f8d58dd75c211cd0535afdde Mon Sep 17 00:00:00 2001 From: Jeff Haynie Date: Thu, 24 Apr 2025 09:31:29 -0500 Subject: [PATCH 1/3] Add a more helpful error message when dev command cannot validate the project --- cmd/dev.go | 2 +- internal/errsystem/errsystem.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/dev.go b/cmd/dev.go index bbf4aca8..0cf875ff 100644 --- a/cmd/dev.go +++ b/cmd/dev.go @@ -64,7 +64,7 @@ Examples: project, err := theproject.Project.GetProject(ctx, log, theproject.APIURL, apiKey) if err != nil { - errsystem.New(errsystem.ErrInvalidConfiguration, err, errsystem.WithContextMessage(fmt.Sprintf("Failed to get project: %s", err))).ShowErrorAndExit() + errsystem.New(errsystem.ErrInvalidConfiguration, err, errsystem.WithUserMessage("We failed to validate your project (%s) using the provided API key from the .env file in %s. This is most likely due to an invalid API key or this project has been deleted.", theproject.Project.ProjectId, dir), errsystem.WithContextMessage(fmt.Sprintf("Failed to get project: %s", err))).ShowErrorAndExit() } orgId := project.OrgId diff --git a/internal/errsystem/errsystem.go b/internal/errsystem/errsystem.go index ca2c97e3..9693d860 100644 --- a/internal/errsystem/errsystem.go +++ b/internal/errsystem/errsystem.go @@ -67,9 +67,9 @@ func (e *errSystem) Error() string { } // WithUserMessage adds a user-friendly message to the error. -func WithUserMessage(message string) option { +func WithUserMessage(message string, args ...any) option { return func(e *errSystem) { - e.message = message + e.message = fmt.Sprintf(message, args...) } } From 9fa22ec7f96bc9e3b4643a887d80702e5e28e16a Mon Sep 17 00:00:00 2001 From: Jeff Haynie Date: Thu, 24 Apr 2025 09:32:26 -0500 Subject: [PATCH 2/3] wordsmith a bit --- cmd/dev.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/dev.go b/cmd/dev.go index 0cf875ff..a197861a 100644 --- a/cmd/dev.go +++ b/cmd/dev.go @@ -64,7 +64,7 @@ Examples: project, err := theproject.Project.GetProject(ctx, log, theproject.APIURL, apiKey) if err != nil { - errsystem.New(errsystem.ErrInvalidConfiguration, err, errsystem.WithUserMessage("We failed to validate your project (%s) using the provided API key from the .env file in %s. This is most likely due to an invalid API key or this project has been deleted.", theproject.Project.ProjectId, dir), errsystem.WithContextMessage(fmt.Sprintf("Failed to get project: %s", err))).ShowErrorAndExit() + errsystem.New(errsystem.ErrInvalidConfiguration, err, errsystem.WithUserMessage("Failed to validate project (%s) using the provided API key from the .env file in %s. This is most likely due to the API key being invalid or the project has been deleted.", theproject.Project.ProjectId, dir), errsystem.WithContextMessage(fmt.Sprintf("Failed to get project: %s", err))).ShowErrorAndExit() } orgId := project.OrgId From ac60716ac77314ea5afc40b7fecd748293f74f60 Mon Sep 17 00:00:00 2001 From: Jeff Haynie Date: Thu, 24 Apr 2025 09:34:56 -0500 Subject: [PATCH 3/3] fix warnings --- internal/project/project.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/project/project.go b/internal/project/project.go index 6fd46d72..45c901e1 100644 --- a/internal/project/project.go +++ b/internal/project/project.go @@ -556,7 +556,7 @@ func ResolveProjectDir(logger logger.Logger, cmd *cobra.Command, required bool) cwd, err := os.Getwd() if err != nil { errsystem.New(errsystem.ErrEnvironmentVariablesNotSet, err, - errsystem.WithUserMessage(fmt.Sprintf("Failed to get current directory: %s", err))).ShowErrorAndExit() + errsystem.WithUserMessage("Failed to get current working directory: %s", err)).ShowErrorAndExit() } dir := cwd dirFlag, _ := cmd.Flags().GetString("dir") @@ -570,7 +570,7 @@ func ResolveProjectDir(logger logger.Logger, cmd *cobra.Command, required bool) abs, err := filepath.Abs(dir) if err != nil { errsystem.New(errsystem.ErrEnvironmentVariablesNotSet, err, - errsystem.WithUserMessage(fmt.Sprintf("Failed to get absolute path: %s", err))).ShowErrorAndExit() + errsystem.WithUserMessage("Failed to get absolute path to %s: %s", dir, err)).ShowErrorAndExit() } if !ProjectExists(abs) && required { dir = viper.GetString("preferences.project_dir")