Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 9 additions & 4 deletions internal/command/comparer.go
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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
Expand Down Expand Up @@ -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)
}
45 changes: 17 additions & 28 deletions internal/command/updater.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"fmt"
"io"
"os"
"os/exec"
"path"
"runtime"

Expand Down Expand Up @@ -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)
Expand All @@ -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)
}
}

Expand Down Expand Up @@ -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
}

Expand All @@ -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)
}
}

Expand All @@ -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
Expand Down
1 change: 1 addition & 0 deletions internal/command/verifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
7 changes: 4 additions & 3 deletions internal/configuration/configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand Down
15 changes: 6 additions & 9 deletions internal/crd/crd.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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
}
Expand Down Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion internal/generator/git.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down
2 changes: 1 addition & 1 deletion internal/generator/gitGeneratorFactory.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
}
Expand Down
2 changes: 1 addition & 1 deletion internal/generator/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}

Expand Down
1 change: 0 additions & 1 deletion make.d/update.mk
Original file line number Diff line number Diff line change
@@ -1,3 +1,2 @@
update: build/bin/catalog
df -h
build/bin/catalog update --registry registry.yaml --configuration configuration.yaml --output schema --definitions definitions