From 8849c22ca0d005debc24abac11d379e994a9c850 Mon Sep 17 00:00:00 2001 From: Michael Podtserkovskii Date: Wed, 28 Aug 2024 10:13:51 +0100 Subject: [PATCH] report packages loading failure with a specific exit-code --- pkg/exitcodes/exitcodes.go | 11 +++++++++++ pkg/lint/package.go | 6 +++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pkg/exitcodes/exitcodes.go b/pkg/exitcodes/exitcodes.go index 83331dbe7b48..3fb562f223b9 100644 --- a/pkg/exitcodes/exitcodes.go +++ b/pkg/exitcodes/exitcodes.go @@ -1,5 +1,9 @@ package exitcodes +import ( + "fmt" +) + const ( Success = iota IssuesFound @@ -9,17 +13,24 @@ const ( NoGoFiles NoConfigFileDetected ErrorWasLogged + PackagesLoadingFailure ) type ExitError struct { + Inner error Message string Code int } func (e ExitError) Error() string { + if e.Inner != nil { + return fmt.Sprintf("%s, %s", e.Message, e.Inner.Error()) + } return e.Message } +func (e ExitError) Unwrap() error { return e.Inner } + var ( ErrNoGoFiles = &ExitError{ Message: "no go files to analyze", diff --git a/pkg/lint/package.go b/pkg/lint/package.go index c314166cae37..13c340a7e291 100644 --- a/pkg/lint/package.go +++ b/pkg/lint/package.go @@ -84,7 +84,11 @@ func (l *PackageLoader) loadPackages(ctx context.Context, loadMode packages.Load pkgs, err := packages.Load(conf, args...) if err != nil { - return nil, fmt.Errorf("failed to load with go/packages: %w", err) + return nil, &exitcodes.ExitError{ + Inner: err, + Message: "failed to load with go/packages:", + Code: exitcodes.PackagesLoadingFailure, + } } if loadMode&packages.NeedSyntax == 0 {