From 23d19c91c0abef691f1640269ace411caece4121 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20SZKIBA?= Date: Tue, 1 Oct 2024 18:52:14 +0200 Subject: [PATCH 1/2] chore: extract version related functions to separated file --- cmd/load.go | 32 -------------------------------- cmd/version.go | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 32 deletions(-) create mode 100644 cmd/version.go diff --git a/cmd/load.go b/cmd/load.go index 2ab7664..78b192e 100644 --- a/cmd/load.go +++ b/cmd/load.go @@ -197,38 +197,6 @@ func loadRepository(ctx context.Context, ext *k6registry.Extension) (*k6registry return nil, nil, fmt.Errorf("%w: %s", errUnsupportedModule, module) } -func tagsToVersions(tags []string) []string { - versions := make([]string, 0, len(tags)) - - for _, tag := range tags { - _, err := semver.NewVersion(tag) - if err != nil { - continue - } - - versions = append(versions, tag) - } - - return versions -} - -func filterVersions(tags []string, constraints *semver.Constraints) []string { - versions := make([]string, 0, len(tags)) - - for _, tag := range tags { - version, err := semver.NewVersion(tag) - if err != nil { - continue - } - - if constraints.Check(version) { - versions = append(versions, tag) - } - } - - return versions -} - func loadGitHub(ctx context.Context, module string) (*k6registry.Repository, []string, error) { slog.Debug("Loading GitHub repository", "module", module) diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..1910e0b --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,35 @@ +package cmd + +import "github.com/Masterminds/semver/v3" + +func tagsToVersions(tags []string) []string { + versions := make([]string, 0, len(tags)) + + for _, tag := range tags { + _, err := semver.NewVersion(tag) + if err != nil { + continue + } + + versions = append(versions, tag) + } + + return versions +} + +func filterVersions(tags []string, constraints *semver.Constraints) []string { + versions := make([]string, 0, len(tags)) + + for _, tag := range tags { + version, err := semver.NewVersion(tag) + if err != nil { + continue + } + + if constraints.Check(version) { + versions = append(versions, tag) + } + } + + return versions +} From fe1b7158f6e2dc57a08ec98812c15b61689191c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20SZKIBA?= Date: Tue, 1 Oct 2024 19:03:59 +0200 Subject: [PATCH 2/2] feat: sort the versions property --- cmd/load.go | 4 ++++ cmd/version.go | 32 +++++++++++++++++++++++++++++++- releases/v0.1.31.md | 9 +++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 releases/v0.1.31.md diff --git a/cmd/load.go b/cmd/load.go index 78b192e..cfbed9e 100644 --- a/cmd/load.go +++ b/cmd/load.go @@ -142,6 +142,10 @@ func load(ctx context.Context, in io.Reader, loose bool, lint bool, origin strin ext.Versions = filterVersions(ext.Versions, constraints) } + + if err := sortVersions(ext.Versions); err != nil { + return nil, err + } } if lint { diff --git a/cmd/version.go b/cmd/version.go index 1910e0b..05c37a1 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,6 +1,10 @@ package cmd -import "github.com/Masterminds/semver/v3" +import ( + "sort" + + "github.com/Masterminds/semver/v3" +) func tagsToVersions(tags []string) []string { versions := make([]string, 0, len(tags)) @@ -33,3 +37,29 @@ func filterVersions(tags []string, constraints *semver.Constraints) []string { return versions } + +func sortVersions(versions []string) error { + type version struct { + source string + parsed *semver.Version + } + + all := make([]*version, 0, len(versions)) + + for _, source := range versions { + parsed, err := semver.NewVersion(source) + if err != nil { + return err + } + + all = append(all, &version{source: source, parsed: parsed}) + } + + sort.Slice(all, func(i, j int) bool { return all[i].parsed.Compare(all[j].parsed) > 0 }) + + for idx := range all { + versions[idx] = all[idx].source + } + + return nil +} diff --git a/releases/v0.1.31.md b/releases/v0.1.31.md new file mode 100644 index 0000000..604d129 --- /dev/null +++ b/releases/v0.1.31.md @@ -0,0 +1,9 @@ +k6registry `v0.1.31` is here 🎉! + +This is an internal maintenance release. + +**Sort the versions property** + +The tags queried via the repository manager API happen to be in good order, the most recently created tag is at the beginning of the list. However, this does not guarantee that the list is always ordered according to semantic versioning. + +After loading and detecting the versions of the extension during registry generation, the versions property now sorted according to semantic versioning.