func LatestVersionArtifactRegistry()

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
}