| // Copyright 2023 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package chartconfig |
| |
| import ( |
| "errors" |
| "fmt" |
| |
| "golang.org/x/mod/semver" |
| ) |
| |
| // Validate checks that a ChartConfig is complete and coherent, returning an |
| // error describing all problems encountered, or nil. |
| func Validate(cfg ChartConfig) error { |
| var errs []error |
| reportf := func(format string, args ...any) { |
| errs = append(errs, fmt.Errorf(format, args...)) |
| } |
| if cfg.Title == "" { |
| reportf("title must be set") |
| } |
| if len(cfg.Issue) == 0 { |
| reportf("at least one issue is required") |
| } |
| if cfg.Program == "" { |
| reportf("program must be set") |
| } |
| if cfg.Counter == "" { |
| reportf("counter must be set") |
| } |
| if cfg.Type == "" { |
| reportf("type must be set") |
| } |
| if cfg.Depth < 0 { |
| reportf("invalid depth %d: must be non-negative", cfg.Depth) |
| } |
| if cfg.Depth != 0 && cfg.Type != "stack" { |
| reportf("depth can only be set for \"stack\" chart types") |
| } |
| if cfg.Version != "" && !semver.IsValid(cfg.Version) { |
| reportf("%q is not valid semver", cfg.Version) |
| } |
| return errors.Join(errs...) |
| } |