@@ -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 }
0 commit comments