private static string GetSummaryVersionChanges()

in src/TemplateRefGenerator/Generators/ChangelogGenerator.cs [404:470]


    private static string GetSummaryVersionChanges(ProviderChangeLog changeLog)
    {
        var sb = new StringBuilder();
        var changesByVersion = changeLog.ResourceTypeChanges
            .SelectMany(x => x.Changes.Select(y => (resourceType: x, versioned: y)))
            .GroupBy(x => x.versioned.Version);

        foreach (var versionChanges in changesByVersion.OrderBy(x => x.Key, ApiVersionComparer.Instance))
        {
            var apiVersion = versionChanges.Key;
            var added = new List<string>();
            var updated = new List<string>();

            foreach (var resourceTypeChanges in versionChanges.OrderBy(x => x.resourceType.ResourceType, StringComparer.OrdinalIgnoreCase))
            {
                var resourceTypeChange = resourceTypeChanges.resourceType;;
                var versionedChange = resourceTypeChanges.versioned;

                if (versionedChange.PrevType is null)
                {
                    added.Add(resourceTypeChange.ResourceType);
                }
                else if (GetUpdates(resourceTypeChange, versionedChange, versionedChange.Changes).Any())
                {
                    updated.Add(resourceTypeChange.ResourceType);
                }
            }

                sb.Append($"""

## {apiVersion}


""");

            if (!added.Any() && !updated.Any())
            {
                sb.Append($"""
No new or updated resource types.

""");
                continue;
            }

            sb.Append($"""
> [!div class="mx-tableFixed"]
> | New | Updated |
> |-----|---------|

""");

            for (var i = 0; i < Math.Max(added.Count, updated.Count); i++)
            {
                var addedLink = i < added.Count ? GetResourceTypeLink(added[i], apiVersion) : "";
                var updatedLink = i < updated.Count ? GetResourceTypeLink(updated[i], apiVersion) : "";

                sb.Append($"""
> | {addedLink} | {updatedLink} |

""");
            }
        }

        sb.AppendLine();

        return sb.ToString();
    }