Skip to content

Commit f772b6e

Browse files
committed
Address reviewer feedback; only trigger for Helm charts
Signed-off-by: Evan Anderson <evan@custcodian.dev>
1 parent 314c103 commit f772b6e

2 files changed

Lines changed: 13 additions & 4 deletions

File tree

internal/controller/ocirepository_controller.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -867,7 +867,7 @@ func (r *OCIRepositoryReconciler) getArtifactRef(obj *sourcev1.OCIRepository, op
867867
}
868868

869869
if obj.Spec.Reference.SemVer != "" {
870-
return r.getTagBySemver(repo, obj.Spec.Reference.SemVer, filterTags(obj.Spec.Reference.SemverFilter), options)
870+
return r.getTagBySemver(repo, obj.Spec.Reference.SemVer, filterTags(obj.Spec.Reference.SemverFilter), obj.GetLayerMediaType(), options)
871871
}
872872

873873
if obj.Spec.Reference.Tag != "" {
@@ -880,7 +880,7 @@ func (r *OCIRepositoryReconciler) getArtifactRef(obj *sourcev1.OCIRepository, op
880880

881881
// getTagBySemver call the remote container registry, fetches all the tags from the repository,
882882
// and returns the latest tag according to the semver expression.
883-
func (r *OCIRepositoryReconciler) getTagBySemver(repo name.Repository, exp string, filter filterFunc, options []remote.Option) (name.Reference, error) {
883+
func (r *OCIRepositoryReconciler) getTagBySemver(repo name.Repository, exp string, filter filterFunc, mediaType string, options []remote.Option) (name.Reference, error) {
884884
tags, err := remote.List(repo, options...)
885885
if err != nil {
886886
return nil, err
@@ -899,10 +899,12 @@ func (r *OCIRepositoryReconciler) getTagBySemver(repo name.Repository, exp strin
899899
var matchingVersions []*semver.Version
900900
for _, t := range validTags {
901901
// Helm translates `+` to `_` in OCI tags, because `+` is not a valid tag character.
902-
versionStr := strings.Replace(t, "_", "+", 1)
902+
if mediaType == "application/vnd.cncf.helm.chart.content.v1.tar+gzip" {
903+
t = strings.Replace(t, "_", "+", 1)
904+
}
903905
// It would be even better to use `org.opencontainers.image.version` annotation
904906
// if present, but that adds a fetch for each tag.
905-
v, err := version.ParseVersion(versionStr)
907+
v, err := version.ParseVersion(t)
906908
if err != nil {
907909
continue
908910
}

internal/controller/ocirepository_controller_test.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2874,6 +2874,7 @@ func TestOCIRepository_getArtifactRef(t *testing.T) {
28742874
name string
28752875
url string
28762876
reference *sourcev1.OCIRepositoryRef
2877+
selector *sourcev1.OCILayerSelector
28772878
wantErr bool
28782879
want string
28792880
}{
@@ -2904,6 +2905,9 @@ func TestOCIRepository_getArtifactRef(t *testing.T) {
29042905
reference: &sourcev1.OCIRepositoryRef{
29052906
SemVer: ">= 6.1.6",
29062907
},
2908+
selector: &sourcev1.OCILayerSelector{
2909+
MediaType: "application/vnd.cncf.helm.chart.content.v1.tar+gzip",
2910+
},
29072911
want: server.registryHost + "/podinfo:6.1.7_ref.1234567",
29082912
},
29092913
{
@@ -2959,6 +2963,9 @@ func TestOCIRepository_getArtifactRef(t *testing.T) {
29592963
if tt.reference != nil {
29602964
obj.Spec.Reference = tt.reference
29612965
}
2966+
if tt.selector != nil {
2967+
obj.Spec.LayerSelector = tt.selector
2968+
}
29622969

29632970
opts := makeRemoteOptions(ctx, makeTransport(true), authn.DefaultKeychain, nil)
29642971
got, err := r.getArtifactRef(obj, opts)

0 commit comments

Comments
 (0)