github.com/argoproj/argo-cd/v2@v2.10.9/util/helm/index.go (about) 1 package helm 2 3 import ( 4 "fmt" 5 "time" 6 7 log "github.com/sirupsen/logrus" 8 9 "github.com/Masterminds/semver/v3" 10 ) 11 12 type Entry struct { 13 Version string 14 Created time.Time 15 } 16 17 type Index struct { 18 Entries map[string]Entries 19 } 20 21 func (i *Index) GetEntries(chart string) (Entries, error) { 22 entries, ok := i.Entries[chart] 23 if !ok { 24 return nil, fmt.Errorf("chart '%s' not found in index", chart) 25 } 26 return entries, nil 27 } 28 29 type Entries []Entry 30 31 func (e Entries) MaxVersion(constraints *semver.Constraints) (*semver.Version, error) { 32 versions := semver.Collection{} 33 for _, entry := range e { 34 v, err := semver.NewVersion(entry.Version) 35 36 //Invalid semantic version ignored 37 if err == semver.ErrInvalidSemVer { 38 log.Debugf("Invalid sementic version: %s", entry.Version) 39 continue 40 } 41 if err != nil { 42 return nil, fmt.Errorf("invalid constraint in index: %v", err) 43 } 44 if constraints.Check(v) { 45 versions = append(versions, v) 46 } 47 } 48 if len(versions) == 0 { 49 return nil, fmt.Errorf("constraint not found in index") 50 } 51 maxVersion := versions[0] 52 for _, v := range versions { 53 if v.GreaterThan(maxVersion) { 54 maxVersion = v 55 } 56 } 57 return maxVersion, nil 58 }