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  }