forked from toolshed/abra
fix(version): semver version ordering (!293)
Solves coop-cloud/organising#427 This fix sorts the recipe versions at the catalogue generation and the versions that are received from the catalogue. Co-authored-by: Moritz <moritz.m@local-it.org> Reviewed-on: coop-cloud/abra#293
This commit is contained in:
@ -8,6 +8,7 @@ import (
|
||||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
@ -22,6 +23,7 @@ import (
|
||||
"coopcloud.tech/abra/pkg/upstream/stack"
|
||||
loader "coopcloud.tech/abra/pkg/upstream/stack"
|
||||
"coopcloud.tech/abra/pkg/web"
|
||||
"coopcloud.tech/tagcmp"
|
||||
composetypes "github.com/docker/cli/cli/compose/types"
|
||||
"github.com/docker/distribution/reference"
|
||||
"github.com/go-git/go-git/v5"
|
||||
@ -1017,12 +1019,52 @@ func GetRecipeVersions(recipeName string, conf *runtime.Config) (RecipeVersions,
|
||||
if err != nil {
|
||||
return versions, err
|
||||
}
|
||||
sortRecipeVersions(versions)
|
||||
|
||||
logrus.Debugf("collected %s for %s", versions, recipeName)
|
||||
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
// sortRecipeVersions sorts the recipe semver versions
|
||||
func sortRecipeVersions(versions RecipeVersions) {
|
||||
sort.Slice(versions, func(i, j int) bool {
|
||||
version1, err := tagcmp.Parse(getVersionString(versions[i]))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
version2, err := tagcmp.Parse(getVersionString(versions[j]))
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return version1.IsLessThan(version2)
|
||||
})
|
||||
}
|
||||
|
||||
// getVersionString returns the version string from RecipeVersions
|
||||
func getVersionString(versionMap map[string]map[string]ServiceMeta) string {
|
||||
// Assuming there's only one key in versionMap
|
||||
for k := range versionMap {
|
||||
return k
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// sortVersionStrings sorts a list of semver version strings
|
||||
func sortVersionStrings(versions []string) {
|
||||
sort.Slice(versions, func(i, j int) bool {
|
||||
version1, err := tagcmp.Parse(versions[i])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
version2, err := tagcmp.Parse(versions[j])
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return version1.IsLessThan(version2)
|
||||
})
|
||||
}
|
||||
|
||||
// GetRecipeCatalogueVersions list the recipe versions listed in the recipe catalogue.
|
||||
func GetRecipeCatalogueVersions(recipeName string, catl RecipeCatalogue) ([]string, error) {
|
||||
var versions []string
|
||||
@ -1034,7 +1076,7 @@ func GetRecipeCatalogueVersions(recipeName string, catl RecipeCatalogue) ([]stri
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sortVersionStrings(versions)
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user