diff --git a/cmd/ghalint/main.go b/cmd/ghalint/main.go index 3ef025d..94ff8b4 100644 --- a/cmd/ghalint/main.go +++ b/cmd/ghalint/main.go @@ -2,11 +2,15 @@ package main import ( "context" + "errors" "os" "os/signal" + "github.com/sirupsen/logrus" "github.com/spf13/afero" "github.com/suzuki-shunsuke/ghalint/pkg/cli" + "github.com/suzuki-shunsuke/ghalint/pkg/controller" + "github.com/suzuki-shunsuke/logrus-error/logerr" ) var ( @@ -16,8 +20,14 @@ var ( ) func main() { + logE := logrus.NewEntry(logrus.New()) if err := core(); err != nil { - os.Exit(1) + hasLogLevel := &controller.HasLogLevelError{} + if errors.As(err, &hasLogLevel) { + logerr.WithError(logE, hasLogLevel.Err).Log(hasLogLevel.LogLevel, "ghalint failed") + os.Exit(1) + } + logerr.WithError(logE, err).Fatal("ghalint failed") } } diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index 920a3fb..3700f3b 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -27,11 +27,15 @@ func (c *Controller) Run(ctx context.Context, logE *logrus.Entry) error { cfg := &config.Config{} if cfgFilePath := config.Find(c.fs); cfgFilePath != "" { if err := config.Read(c.fs, cfg, cfgFilePath); err != nil { - return fmt.Errorf("read a configuration file: %w", err) + return fmt.Errorf("read a configuration file: %w", logerr.WithFields(err, logrus.Fields{ + "config_file": cfgFilePath, + })) + } + if err := config.Validate(cfg); err != nil { + return fmt.Errorf("validate a configuration file: %w", logerr.WithFields(err, logrus.Fields{ + "config_file": cfgFilePath, + })) } - } - if err := config.Validate(cfg); err != nil { - return fmt.Errorf("validate a configuration file: %w", err) } filePaths, err := workflow.List(c.fs) if err != nil { @@ -55,7 +59,7 @@ func (c *Controller) Run(ctx context.Context, logE *logrus.Entry) error { } } if failed { - return errors.New("some workflow files are invalid") + return debugError(errors.New("some workflow files are invalid")) } return nil } diff --git a/pkg/controller/error.go b/pkg/controller/error.go new file mode 100644 index 0000000..e15f091 --- /dev/null +++ b/pkg/controller/error.go @@ -0,0 +1,23 @@ +package controller + +import "github.com/sirupsen/logrus" + +type HasLogLevelError struct { + LogLevel logrus.Level + Err error +} + +func (e *HasLogLevelError) Error() string { + return e.Err.Error() +} + +func (e *HasLogLevelError) Unwrap() error { + return e.Err +} + +func debugError(err error) *HasLogLevelError { + return &HasLogLevelError{ + LogLevel: logrus.DebugLevel, + Err: err, + } +}