in sharedlibraries/statushelper/statushelper.go [106:133]
func LatestVersionArtifactRegistry(ctx context.Context, arClient ARClientInterface, projectName string, repositoryLocation string, repositoryName string, packageName string) (string, error) {
var versions []string
it := arClient.ListVersions(ctx, &arpb.ListVersionsRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s/repositories/%s/packages/%s", projectName, repositoryLocation, repositoryName, packageName),
})
for {
resp, err := it.Next()
if err == iterator.Done {
break
}
if err != nil {
return "", err
}
// Strip the repo, location, and package path from the response.
versions = append(versions, resp.GetName()[strings.LastIndex(resp.GetName(), ":")+1:])
}
if len(versions) == 0 {
return "", fmt.Errorf("no versions found for package: %s", packageName)
}
// Sort using semver versioning, convert "3.10-12345" to "v3.10.12345".
sort.Slice(versions, func(i, j int) bool {
v1 := "v" + strings.ReplaceAll(versions[i], "-", ".")
v2 := "v" + strings.ReplaceAll(versions[j], "-", ".")
return semver.Compare(v1, v2) < 0
})
return versions[len(versions)-1], nil
}