@@ -665,14 +665,45 @@ func resolvePackUID(c *client.V1Client, name, tag, registryUID string) (string,
665665 return "" , fmt .Errorf ("failed to get pack versions for name %s in registry %s: %w" , name , registryUID , err )
666666 }
667667
668- if packVersions == nil || len (packVersions .Tags ) == 0 {
669- return "" , fmt .Errorf ("no pack found with name %s in registry %s" , name , registryUID )
668+ // Path 1: Public registry — has Tags; resolve from Tags only.
669+ if packVersions != nil && len (packVersions .Tags ) > 0 {
670+ for _ , packTag := range packVersions .Tags {
671+ if packTag .Version == tag {
672+ return packTag .PackUID , nil
673+ }
674+ }
675+ return "" , fmt .Errorf ("no pack found with name %s, tag %s in registry %s" , name , tag , registryUID )
670676 }
671677
672- // Find the pack with matching tag/version
673- for _ , packTag := range packVersions .Tags {
674- if packTag .Version == tag {
675- return packTag .PackUID , nil
678+ // Path 2: Private registry — no Tags; do not use packVersions.Tags. Resolve via list/search.
679+ registryFilter := "spec.registryUid=" + registryUID
680+ packs , listErr := c .GetPacks ([]string {registryFilter }, registryUID )
681+ if listErr != nil {
682+ return "" , fmt .Errorf ("no pack found with name %s in registry %s (list failed: %w)" , name , registryUID , listErr )
683+ }
684+ for _ , pack := range packs {
685+ if pack .Spec != nil && pack .Spec .Name == name && pack .Spec .Version == tag {
686+ if pack .Metadata != nil && pack .Metadata .UID != "" {
687+ return pack .Metadata .UID , nil
688+ }
689+ }
690+ }
691+
692+ // Fallback: SearchPacks (resolves latest version only when tag matches).
693+ searchFilter := & models.V1PackFilterSpec {
694+ Name : & models.V1FilterString {Eq : StringPtr (name )},
695+ RegistryUID : []string {registryUID },
696+ Type : []* models.V1PackType {
697+ types .Ptr (models .V1PackTypeHelm ),
698+ types .Ptr (models .V1PackTypeOci ),
699+ },
700+ }
701+ searchResults , searchErr := c .SearchPacks (searchFilter , nil )
702+ if searchErr == nil && len (searchResults ) == 1 && searchResults [0 ].Spec != nil {
703+ for _ , reg := range searchResults [0 ].Spec .Registries {
704+ if reg != nil && reg .UID == registryUID && reg .LatestVersion == tag && reg .LatestPackUID != "" {
705+ return reg .LatestPackUID , nil
706+ }
676707 }
677708 }
678709
0 commit comments