diff --git a/app/scaffold/rc.go b/app/scaffold/rc.go index 89352f4..3eefa59 100644 --- a/app/scaffold/rc.go +++ b/app/scaffold/rc.go @@ -1,6 +1,7 @@ package scaffold import ( + "errors" "fmt" "io" "net/url" @@ -52,6 +53,10 @@ func NewScaffoldRC(r io.Reader) (*ScaffoldRC, error) { err := yaml.NewDecoder(r).Decode(&out) if err != nil { + if errors.Is(err, io.EOF) { + // Asssume empty file and return empty struct + return &out, nil + } return nil, err } diff --git a/main.go b/main.go index 9c01988..e797619 100644 --- a/main.go +++ b/main.go @@ -135,20 +135,25 @@ func main() { // Parse scaffoldrc file scaffoldrcFile, err := os.Open(ctrl.Flags.ScaffoldRCPath) if err != nil { - return fmt.Errorf("failed to open scaffoldrc file: %w", err) + if !errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("failed to open scaffoldrc file: %w", err) + } + log.Debug().Msg("scaffoldrc file does not exist, skipping") } - rc, err := scaffold.NewScaffoldRC(scaffoldrcFile) - if err != nil { - switch { - case errors.As(err, &scaffold.RcValidationErrors{}): - // I _know_ this is a valid cast, but the linter doesn't - e := err.(scaffold.RcValidationErrors) //nolint:errorlint - for _, err := range e { - log.Error().Str("key", err.Key).Msg(err.Cause.Error()) + rc := &scaffold.ScaffoldRC{} + if scaffoldrcFile != nil { + rc, err = scaffold.NewScaffoldRC(scaffoldrcFile) + if err != nil { + scaferrs := scaffold.RcValidationErrors{} + switch { + case errors.As(err, &scaferrs): + for _, err := range scaferrs { + log.Error().Str("key", err.Key).Msg(err.Cause.Error()) + } + default: + return fmt.Errorf("failed to parse scaffoldrc file: %w", err) } - default: - return fmt.Errorf("failed to parse scaffoldrc file: %w", err) } }