From 7c6a5924493abc32954e397dfb876256e22a1d92 Mon Sep 17 00:00:00 2001 From: Anvay Date: Tue, 27 Jan 2026 22:45:59 +0530 Subject: [PATCH] fix: add missing error returns in command handlers Several commands were logging errors with log.Errorf() but continuing execution instead of returning the error. This caused commands to silently fail and proceed with invalid/empty values. Fixed files: - cmd/harbor/root/artifact/delete.go - cmd/harbor/root/artifact/scan.go - cmd/harbor/root/artifact/tags.go - cmd/harbor/root/artifact/view.go - cmd/harbor/root/repository/delete.go Changes: - Convert Run to RunE for proper error handling - Replace log.Errorf() with return fmt.Errorf() to propagate errors - Remove unused log imports Signed-off-by: Anvay --- cmd/harbor/root/artifact/delete.go | 3 +-- cmd/harbor/root/artifact/scan.go | 11 ++++----- cmd/harbor/root/artifact/tags.go | 36 +++++++++++++++------------- cmd/harbor/root/artifact/view.go | 22 ++++++++--------- cmd/harbor/root/repository/delete.go | 13 +++++----- 5 files changed, 42 insertions(+), 43 deletions(-) diff --git a/cmd/harbor/root/artifact/delete.go b/cmd/harbor/root/artifact/delete.go index 21523352..549e023a 100644 --- a/cmd/harbor/root/artifact/delete.go +++ b/cmd/harbor/root/artifact/delete.go @@ -19,7 +19,6 @@ import ( "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/prompt" "github.com/goharbor/harbor-cli/pkg/utils" - log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -39,7 +38,7 @@ func DeleteArtifactCommand() *cobra.Command { } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) reference = prompt.GetReferenceFromUser(repoName, projectName) diff --git a/cmd/harbor/root/artifact/scan.go b/cmd/harbor/root/artifact/scan.go index bb3e75e7..72750295 100644 --- a/cmd/harbor/root/artifact/scan.go +++ b/cmd/harbor/root/artifact/scan.go @@ -19,7 +19,6 @@ import ( "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/prompt" "github.com/goharbor/harbor-cli/pkg/utils" - log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -79,20 +78,19 @@ func StopScanArtifactCommand() *cobra.Command { Short: "Stop a scan of an artifact", Long: `Stop a scan of an artifact in Harbor Repository`, Example: `harbor artifact scan stop //`, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var projectName, repoName, reference string if len(args) > 0 { projectName, repoName, reference, err = utils.ParseProjectRepoReference(args[0]) if err != nil { - log.Errorf("failed to parse project/repo/reference: %v", err) + return fmt.Errorf("failed to parse project/repo/reference: %v", err) } } else { - var projectName string projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) reference = prompt.GetReferenceFromUser(repoName, projectName) @@ -100,8 +98,9 @@ func StopScanArtifactCommand() *cobra.Command { err = api.StopScanArtifact(projectName, repoName, reference) if err != nil { - log.Errorf("failed to stop scan of artifact: %v", err) + return fmt.Errorf("failed to stop scan of artifact: %v", err) } + return nil }, } return cmd diff --git a/cmd/harbor/root/artifact/tags.go b/cmd/harbor/root/artifact/tags.go index 4f9a60f5..c76336df 100644 --- a/cmd/harbor/root/artifact/tags.go +++ b/cmd/harbor/root/artifact/tags.go @@ -14,13 +14,14 @@ package artifact import ( + "fmt" + "github.com/goharbor/go-client/pkg/sdk/v2.0/client/artifact" "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/prompt" "github.com/goharbor/harbor-cli/pkg/utils" "github.com/goharbor/harbor-cli/pkg/views/artifact/tags/create" "github.com/goharbor/harbor-cli/pkg/views/artifact/tags/list" - log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -46,20 +47,20 @@ func CreateTagsCmd() *cobra.Command { Use: "create", Short: "Create a tag of an artifact", Example: `harbor artifact tags create // `, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var projectName, repoName, reference string var tagName string if len(args) > 0 { projectName, repoName, reference, err = utils.ParseProjectRepoReference(args[0]) if err != nil { - log.Errorf("failed to parse project/repo/reference: %v", err) + return fmt.Errorf("failed to parse project/repo/reference: %v", err) } tagName = args[1] } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) reference = prompt.GetReferenceFromUser(repoName, projectName) @@ -67,8 +68,9 @@ func CreateTagsCmd() *cobra.Command { } err = api.CreateTag(projectName, repoName, reference, tagName) if err != nil { - log.Errorf("failed to create tag: %v", err) + return fmt.Errorf("failed to create tag: %v", err) } + return nil }, } @@ -80,7 +82,7 @@ func ListTagsCmd() *cobra.Command { Use: "list", Short: "List tags of an artifact", Example: `harbor artifact tags list //`, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var tags *artifact.ListTagsOK var projectName, repoName, reference string @@ -88,16 +90,16 @@ func ListTagsCmd() *cobra.Command { if len(args) > 0 { projectName, repoName, reference, err = utils.ParseProjectRepoReference(args[0]) if err != nil { - log.Errorf("failed to parse project/repo/reference: %v", err) + return fmt.Errorf("failed to parse project/repo/reference: %v", err) } } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) if repoName == "" { - return + return nil } reference = prompt.GetReferenceFromUser(repoName, projectName) } @@ -105,20 +107,19 @@ func ListTagsCmd() *cobra.Command { tags, err = api.ListTags(projectName, repoName, reference) if err != nil { - log.Errorf("failed to list tags: %v", err) - return + return fmt.Errorf("failed to list tags: %v", err) } FormatFlag := viper.GetString("output-format") if FormatFlag != "" { err = utils.PrintFormat(tags, FormatFlag) if err != nil { - log.Error(err) - return + return err } } else { list.ListTags(tags.Payload) } + return nil }, } @@ -130,20 +131,20 @@ func DeleteTagsCmd() *cobra.Command { Use: "delete", Short: "Delete a tag of an artifact", Example: `harbor artifact tags delete // `, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var projectName, repoName, reference string var tagName string if len(args) > 0 { projectName, repoName, reference, err = utils.ParseProjectRepoReference(args[0]) if err != nil { - log.Errorf("failed to parse project/repo/reference: %v", err) + return fmt.Errorf("failed to parse project/repo/reference: %v", err) } tagName = args[1] } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) reference = prompt.GetReferenceFromUser(repoName, projectName) @@ -151,8 +152,9 @@ func DeleteTagsCmd() *cobra.Command { } err = api.DeleteTag(projectName, repoName, reference, tagName) if err != nil { - log.Errorf("failed to delete tag: %v", err) + return fmt.Errorf("failed to delete tag: %v", err) } + return nil }, } diff --git a/cmd/harbor/root/artifact/view.go b/cmd/harbor/root/artifact/view.go index 0b5a4065..0d00fcec 100644 --- a/cmd/harbor/root/artifact/view.go +++ b/cmd/harbor/root/artifact/view.go @@ -14,12 +14,13 @@ package artifact import ( + "fmt" + "github.com/goharbor/go-client/pkg/sdk/v2.0/client/artifact" "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/prompt" "github.com/goharbor/harbor-cli/pkg/utils" "github.com/goharbor/harbor-cli/pkg/views/artifact/view" - log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "github.com/spf13/viper" ) @@ -30,7 +31,7 @@ func ViewArtifactCommmand() *cobra.Command { Short: "Get information of an artifact", Long: `Get information of an artifact`, Example: `harbor artifact view /: OR harbor artifact view /@`, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var projectName, repoName, reference string var artifact *artifact.GetArtifactOK @@ -38,13 +39,12 @@ func ViewArtifactCommmand() *cobra.Command { if len(args) > 0 { projectName, repoName, reference, err = utils.ParseProjectRepoReference(args[0]) if err != nil { - log.Errorf("failed to parse project/repo/reference: %v", err) + return fmt.Errorf("failed to parse project/repo/reference: %v", err) } } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) - return + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) reference = prompt.GetReferenceFromUser(repoName, projectName) @@ -52,29 +52,27 @@ func ViewArtifactCommmand() *cobra.Command { if reference == "" { if len(args) > 0 { - log.Errorf("Invalid artifact reference format: %s", args[0]) - } else { - log.Error("Invalid artifact reference format: no arguments provided") + return fmt.Errorf("invalid artifact reference format: %s", args[0]) } + return fmt.Errorf("invalid artifact reference format: no arguments provided") } artifact, err = api.ViewArtifact(projectName, repoName, reference, false) if err != nil { - log.Errorf("failed to get info of an artifact: %v", err) - return + return fmt.Errorf("failed to get info of an artifact: %v", err) } FormatFlag := viper.GetString("output-format") if FormatFlag != "" { err = utils.PrintFormat(artifact, FormatFlag) if err != nil { - log.Error(err) - return + return err } } else { view.ViewArtifact(artifact.Payload) } + return nil }, } diff --git a/cmd/harbor/root/repository/delete.go b/cmd/harbor/root/repository/delete.go index 336b2196..d10e1225 100644 --- a/cmd/harbor/root/repository/delete.go +++ b/cmd/harbor/root/repository/delete.go @@ -14,10 +14,11 @@ package repository import ( + "fmt" + "github.com/goharbor/harbor-cli/pkg/api" "github.com/goharbor/harbor-cli/pkg/prompt" "github.com/goharbor/harbor-cli/pkg/utils" - log "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -27,27 +28,27 @@ func RepoDeleteCmd() *cobra.Command { Short: "Delete a repository", Example: ` harbor repository delete [project_name]/[repository_name]`, Long: `Delete a repository within a project in Harbor`, - Run: func(cmd *cobra.Command, args []string) { + RunE: func(cmd *cobra.Command, args []string) error { var err error var projectName string var repoName string if len(args) > 0 { projectName, repoName, err = utils.ParseProjectRepo(args[0]) if err != nil { - log.Errorf("failed to parse project/repo: %v", err) - return + return fmt.Errorf("failed to parse project/repo: %v", err) } } else { projectName, err = prompt.GetProjectNameFromUser() if err != nil { - log.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) + return fmt.Errorf("failed to get project name: %v", utils.ParseHarborErrorMsg(err)) } repoName = prompt.GetRepoNameFromUser(projectName) } err = api.RepoDelete(projectName, repoName, false) if err != nil { - log.Errorf("failed to delete repository: %v", err) + return fmt.Errorf("failed to delete repository: %v", err) } + return nil }, } return cmd