22// SPDX-License-Identifier: Apache-2.0
33
44/*
5- Utility functions that apply to "packages", e.g. helm charts or carvel packages
5+ Utility functions that apply to "packages", e.g. helm charts or carvel packages
66*/
77package pkgutils
88
@@ -26,6 +26,7 @@ import (
2626 structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
2727 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2828 "k8s.io/apimachinery/pkg/runtime"
29+ log "k8s.io/klog/v2"
2930)
3031
3132// Contains miscellaneous package-utilities used by multiple plug-ins
@@ -59,12 +60,15 @@ type packageSemVersion struct {
5960 appVersion string
6061}
6162
62- func sortByPackageVersion (versions []models.ChartVersion ) []* packageSemVersion {
63+ func sortByPackageVersion (versions []models.ChartVersion ) ( []* packageSemVersion , error ) {
6364 var sortedVersions []* packageSemVersion
6465 for _ , v := range versions {
6566 version , err := semver .NewVersion (v .Version )
6667 if err != nil {
67- continue
68+ return nil , err
69+ }
70+ if version .String () != v .Version {
71+ return nil , fmt .Errorf ("Chart version %q is not semver" , v .Version )
6872 }
6973
7074 sortedVersions = append (sortedVersions , & packageSemVersion {
@@ -75,17 +79,29 @@ func sortByPackageVersion(versions []models.ChartVersion) []*packageSemVersion {
7579 sort .Slice (sortedVersions , func (i , j int ) bool {
7680 return sortedVersions [i ].Version .GreaterThan (sortedVersions [j ].Version )
7781 })
78- return sortedVersions
82+ return sortedVersions , nil
7983}
8084
8185// PackageAppVersionsSummary converts the model chart versions into the required version summary.
8286func PackageAppVersionsSummary (versions []models.ChartVersion , versionInSummary VersionsInSummary ) []* corev1.PackageAppVersion {
8387
84- // Sort versions
85- sortedVersions := sortByPackageVersion (versions )
86-
8788 var pav []* corev1.PackageAppVersion
8889
90+ // Sort versions
91+ sortedVersions , err := sortByPackageVersion (versions )
92+ if err != nil {
93+ // If there was an error parsing a version as semver, we log the error
94+ // and simply return the versions, as Helm does.
95+ log .Errorf ("error parsing versions as semver: %w" , err )
96+ for _ , version := range versions {
97+ pav = append (pav , & corev1.PackageAppVersion {
98+ PkgVersion : version .Version ,
99+ AppVersion : version .AppVersion ,
100+ })
101+ }
102+ return pav
103+ }
104+
89105 // Use a version map to be able to count how many major, minor and patch versions
90106 // we have included.
91107 versionMap := map [uint64 ]map [uint64 ][]uint64 {}
0 commit comments