diff --git a/internal/command/comparer.go b/internal/command/comparer.go index fc1f761b5..26185b4b5 100644 --- a/internal/command/comparer.go +++ b/internal/command/comparer.go @@ -258,14 +258,14 @@ func (data *markdownData) update(current []item, target []item, ignores []ignore } } - marker := make(map[string]bool, 0) + marker := make(map[string]bool) for _, i := range current { marker[i.Id()] = false } ignored := make([]ignoreItem, 0) missing := make([]item, 0) - groups := make(map[string]string, 0) + groups := make(map[string]string) for _, item := range target { id := item.Id() _, ok := marker[id] @@ -284,7 +284,7 @@ func (data *markdownData) update(current []item, target []item, ignores []ignore for group := range groups { item := markdownItem{Group: group, Items: []markdownItems{}} - kinds := make(map[string]string, 0) + kinds := make(map[string]string) for _, i := range missing { if i.group != group { continue @@ -333,6 +333,11 @@ func (data *markdownData) update(current []item, target []item, ignores []ignore return result }) - ratio := float32(len(target)-len(missing)) / float32(len(target)) + var ratio float32 + if len(target) == 0 { + ratio = 1 + } else { + ratio = float32(len(target)-len(missing)) / float32(len(target)) + } data.Ratio = fmt.Sprintf("%.2f%%", ratio*100) } diff --git a/internal/command/updater.go b/internal/command/updater.go index 44edf692e..35f0f0ddf 100644 --- a/internal/command/updater.go +++ b/internal/command/updater.go @@ -6,7 +6,6 @@ import ( "fmt" "io" "os" - "os/exec" "path" "runtime" @@ -48,24 +47,11 @@ func (cmd Updater) Run() error { return err } - if cmd.registryPath != "" { - reg, err := registry.Load(cmd.registryPath) - if err != nil { - return fmt.Errorf("failed to load registry: %w", err) - } - cmd.registry = reg - } - configurations, err := readConfiguration(cmd.Configuration) if err != nil { return err } - reader, err := crd.NewCrdReader(cmd.Logger) - if err != nil { - return err - } - tmpDir, err := os.MkdirTemp("", "output") if err != nil { return fmt.Errorf("failed to create temp dir: %w", err) @@ -75,27 +61,22 @@ func (cmd Updater) Run() error { for _, config := range splitConfigurations(configurations) { runtime.GC() - build, err := generator.NewBuilder(config, reader, tmpDir, cmd.Schema, cmd.Definitions, cmd.Logger, cmd.registry) + build, err := generator.NewBuilder(config, cmd.reader, tmpDir, cmd.Schema, cmd.Definitions, cmd.Logger, cmd.registry) if err != nil { + fmt.Fprintf(cmd.Logger, "::warning:: unable to create builder for %s: %v\n", config.Name, err) continue } err = build.Build() if err != nil { + fmt.Fprintf(cmd.Logger, "::warning:: build of %s failed: %v\n", config.Name, err) continue } - - out, err := exec.Command("df", "-h", cmd.Schema).Output() - if err != nil { - return fmt.Errorf("unable to look up free disk space: %w", err) - } - - fmt.Fprintf(cmd.Logger, "%s\n\n", string(out)) } if cmd.registry != nil && cmd.registryPath != "" { if err := cmd.registry.Save(cmd.registryPath); err != nil { - fmt.Fprintf(cmd.Logger, "Warning: failed to save registry: %v\n", err) + fmt.Fprintf(cmd.Logger, "::warning:: failed to save registry: %v\n", err) } } @@ -129,6 +110,14 @@ func (cmd *Updater) initialize() error { } cmd.reader = reader + if cmd.registryPath != "" { + reg, err := registry.Load(cmd.registryPath) + if err != nil { + return fmt.Errorf("failed to load registry: %w", err) + } + cmd.registry = reg + } + return nil } @@ -155,10 +144,10 @@ func splitConfigurations(configurations []configuration.Configuration) []configu continue } for _, e := range c.Entries { - copy := c - copy.Name = fmt.Sprintf("%s.%s", c.Name, e) - copy.Entries = []string{e} - updated = append(updated, copy) + cfg := c + cfg.Name = fmt.Sprintf("%s.%s", c.Name, e) + cfg.Entries = []string{e} + updated = append(updated, cfg) } } @@ -175,7 +164,7 @@ func merge(generatedRepository, schemaRepository string) error { for _, group := range groups { if group.IsDir() { - os.Mkdir(path.Join(schemaRepository, group.Name()), 0755) + _ = os.Mkdir(path.Join(schemaRepository, group.Name()), 0755) files, err := os.ReadDir(path.Join(generatedRepository, group.Name())) if err != nil { return err diff --git a/internal/command/verifier.go b/internal/command/verifier.go index 2dc8e5073..ae8d88e27 100644 --- a/internal/command/verifier.go +++ b/internal/command/verifier.go @@ -107,6 +107,7 @@ func unpack(file string, data []byte) (any, error) { return nil, fmt.Errorf("unable to unpack '%s' as either JSON or YAML", file) } +// tryUnpack attempts to deserialize data as yaml and as json and returns true if either succeeds func tryUnpack(data []byte, target any) bool { return yaml.Unmarshal(data, target) == nil || json.Unmarshal(data, target) == nil } diff --git a/internal/configuration/configuration.go b/internal/configuration/configuration.go index cf82d7cc5..6c89ade38 100644 --- a/internal/configuration/configuration.go +++ b/internal/configuration/configuration.go @@ -84,11 +84,12 @@ func UnmarshalConfigurations(reader io.Reader) ([]Configuration, error) { // ValuesFile resolves the most relevant values file content from the configuration, // note that versions are treated as semver, but any prefix/suffix extras or leading zeroes will result in improper sorting func (c *Configuration) ValuesFile(version string) (map[string]any, error) { - sort.Slice(c.Values, func(i, j int) bool { - return semver.Compare(c.Values[i].Version, c.Values[j].Version) > 0 + values := c.Values + sort.Slice(values, func(i, j int) bool { + return semver.Compare(values[i].Version, values[j].Version) > 0 }) - for _, v := range c.Values { + for _, v := range values { if semver.Compare(v.Version, version) > 0 { continue } diff --git a/internal/crd/crd.go b/internal/crd/crd.go index 4bdd91915..ff5776551 100644 --- a/internal/crd/crd.go +++ b/internal/crd/crd.go @@ -44,6 +44,8 @@ type CrdMetaSchema struct { Group, Kind, Version string } +var emptyDocument = regexp.MustCompile(`[^\t\n\v\f\r ]+`) + func NewCrdReader(logger io.Writer) (CrdReader, error) { scheme := runtime.NewScheme() if err := v1beta1.AddToScheme(scheme); err != nil { @@ -71,12 +73,7 @@ func NewCrdReader(logger io.Writer) (CrdReader, error) { codecs := serializer.NewCodecFactory(scheme) decoder := codecs.UniversalDeserializer() - matcher, err := regexp.Compile(`[^\t\n\v\f\r ]+`) - if err != nil { - return nil, err - } - - return &crdReader{decoder: decoder, logger: logger, matcher: matcher, scheme: scheme}, nil + return &crdReader{decoder: decoder, logger: logger, matcher: emptyDocument, scheme: scheme}, nil } func (r *crdReader) Read(reader io.Reader, file string) ([]Crd, error) { @@ -118,11 +115,11 @@ func (r *crdReader) Read(reader io.Reader, file string) ([]Crd, error) { doc = out } - if crd.Spec.Group == "" { + if len(crd.Spec.Group) == 0 { fmt.Fprintf(r.logger, " empty group declared for %s at %s\n", crd.ObjectMeta.Name, file) continue } - if crd.Spec.Names.Kind == "" { + if len(crd.Spec.Names.Kind) == 0 { fmt.Fprintf(r.logger, " empty group declared for %s at %s\n", crd.ObjectMeta.Name, file) continue } @@ -241,7 +238,7 @@ func applyDefaults(schema *v1.JSONSchemaProps, skip bool) { } } -func (r crdReader) convertToV1(obj runtime.Object) *v1.CustomResourceDefinition { +func (r *crdReader) convertToV1(obj runtime.Object) *v1.CustomResourceDefinition { var ( crd v1.CustomResourceDefinition err error diff --git a/internal/generator/git.go b/internal/generator/git.go index 421bc0bf6..193f21ec7 100644 --- a/internal/generator/git.go +++ b/internal/generator/git.go @@ -244,7 +244,7 @@ func (generator *GitGenerator) ensureLoaded() error { b = after } - if b == "" || b == "HEAD" || b == "origin" { + if len(b) == 0 || b == "HEAD" || b == "origin" { continue } diff --git a/internal/generator/gitGeneratorFactory.go b/internal/generator/gitGeneratorFactory.go index ae97dfc11..47d50afce 100644 --- a/internal/generator/gitGeneratorFactory.go +++ b/internal/generator/gitGeneratorFactory.go @@ -164,7 +164,7 @@ func (f *gitGeneratorFactory) fetchRefs(owner, repo, token, prefix string) ([]ve hasNextPage = result.Data.Repository.Refs.PageInfo.HasNextPage cursor = result.Data.Repository.Refs.PageInfo.EndCursor - if cursor == "" { + if len(cursor) == 0 { hasNextPage = false } } diff --git a/internal/generator/helm.go b/internal/generator/helm.go index 6c7adaba1..411752879 100644 --- a/internal/generator/helm.go +++ b/internal/generator/helm.go @@ -71,7 +71,7 @@ func (generator *HelmGenerator) Crds(version string) ([]crd.Crd, error) { return nil, err } - if version == "" { + if len(version) == 0 { version = ">0.0.0" } diff --git a/make.d/update.mk b/make.d/update.mk index 565f93a16..11ae2bfa6 100644 --- a/make.d/update.mk +++ b/make.d/update.mk @@ -1,3 +1,2 @@ update: build/bin/catalog - df -h build/bin/catalog update --registry registry.yaml --configuration configuration.yaml --output schema --definitions definitions