Merge pull request #10 from drone-plugins/errors-pkg

Add errors package for exit code handling
This commit is contained in:
Thomas Boerger 2020-01-22 11:49:15 +01:00 committed by GitHub
commit 243861c706
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 73 additions and 0 deletions

73
errors/errors.go Normal file
View File

@ -0,0 +1,73 @@
package errors
import (
"fmt"
"os"
"github.com/sirupsen/logrus"
)
// ExitCoder defines the interface for exit code handling.
type ExitCoder interface {
error
Code() int
Fields() logrus.Fields
}
// ExitError simply implements the defined interface.
type ExitError struct {
message interface{}
code int
fields logrus.Fields
}
// Error implements the ExitCoder interface.
func (e ExitError) Error() string {
return fmt.Sprintf("%v", e.message)
}
// Code implements the ExitCoder interface.
func (e ExitError) Code() int {
return e.code
}
// Fields implements the ExitCoder interface.
func (e ExitError) Fields() logrus.Fields {
return e.fields
}
// ExitMessage initiales a new ExitCoder implementation.
func ExitMessage(message interface{}) ExitError {
return ExitError{
message: message,
code: 1,
}
}
// WithFields initiales a new ExitCoder implementation.
func WithFields(message interface{}, fields logrus.Fields) ExitError {
return ExitError{
message: message,
code: 1,
fields: fields,
}
}
// HandleExit ist used within the main handler to exit properly.
func HandleExit(err error) {
if err == nil {
return
}
if e, ok := err.(ExitCoder); ok {
if e.Error() != "" {
logrus.WithFields(
e.Fields(),
).Error(
e.Error(),
)
}
os.Exit(e.Code())
}
}