Skip to content

Commit f5ebdce

Browse files
loresusopoiana
authored andcommitted
refactor: move responsability of listing tag to repository struct
Signed-off-by: Lorenzo Susini <[email protected]>
1 parent 57bf41f commit f5ebdce

File tree

2 files changed

+54
-82
lines changed

2 files changed

+54
-82
lines changed

pkg/oci/repository/repository.go

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,12 @@
1515
package repository
1616

1717
import (
18+
"context"
1819
"fmt"
1920

2021
"oras.land/oras-go/v2/registry/remote"
2122

23+
"github.com/blang/semver"
2224
"github.com/falcosecurity/falcoctl/pkg/oci/authn"
2325
)
2426

@@ -59,3 +61,55 @@ func WithPlainHTTP(plainHTTP bool) func(r *Repository) {
5961
r.PlainHTTP = plainHTTP
6062
}
6163
}
64+
65+
// Tags returns the list of all available tags of an artifact given a reference to a repository.
66+
func (r *Repository) Tags(ctx context.Context, ref string, client *authn.Client) ([]string, error) {
67+
var result []string
68+
var tagRetriever = func(tags []string) error {
69+
result = tags
70+
return nil
71+
}
72+
73+
err := r.Repository.Tags(ctx, "", tagRetriever)
74+
if err != nil {
75+
return nil, err
76+
}
77+
78+
result, err = sortTags(result)
79+
if err != nil {
80+
return nil, err
81+
}
82+
83+
return result, nil
84+
}
85+
86+
func sortTags(tags []string) ([]string, error) {
87+
var parsedVersions []semver.Version
88+
var latest bool
89+
for _, t := range tags {
90+
if t == "latest" {
91+
latest = true
92+
continue
93+
}
94+
95+
parsedVersion, err := semver.Parse(t)
96+
if err != nil {
97+
return nil, fmt.Errorf("cannot parse version %q", t)
98+
}
99+
100+
parsedVersions = append(parsedVersions, parsedVersion)
101+
}
102+
103+
semver.Sort(parsedVersions)
104+
105+
var result []string
106+
for _, parsedVersion := range parsedVersions {
107+
result = append(result, parsedVersion.String())
108+
}
109+
110+
if latest {
111+
result = append(result, "latest")
112+
}
113+
114+
return result, nil
115+
}

pkg/oci/tags.go

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)