diff --git a/eng/common/docgeneration/Generate-DocIndex.ps1 b/eng/common/docgeneration/Generate-DocIndex.ps1 index 461b15ce01ff..08c66f3b618f 100644 --- a/eng/common/docgeneration/Generate-DocIndex.ps1 +++ b/eng/common/docgeneration/Generate-DocIndex.ps1 @@ -66,8 +66,8 @@ function Get-TocMapping { foreach ($artifact in $artifacts) { $packageInfo = $metadata | ? { $_.Package -eq $artifact -and $_.Hide -ne "true" } + $serviceName = "" - $displayName = "" if (!$packageInfo) { LogDebug "There is no service name for artifact $artifact or it is marked as hidden. Please check csv of Azure/azure-sdk/_data/release/latest repo if this is intended. " continue @@ -76,16 +76,28 @@ function Get-TocMapping { LogWarning "There is no service name for artifact $artifact. Please check csv of Azure/azure-sdk/_data/release/latest repo if this is intended. " # If no service name retrieved, print out warning message, and put it into Other page. $serviceName = "Other" - $displayName = $packageInfo[0].DisplayName.Trim() } else { if ($packageInfo.Length -gt 1) { LogWarning "There are more than 1 packages fetched out for artifact $artifact. Please check csv of Azure/azure-sdk/_data/release/latest repo if this is intended. " } $serviceName = $packageInfo[0].ServiceName.Trim() - $displayName = $packageInfo[0].DisplayName.Trim() } - $orderServiceMapping[$artifact] = @($serviceName, $displayName) + + # Define the order of "New", "Type", if not match, return the length of the array. + $CustomOrder_New = "true", "false", "" + $newIndex = $CustomOrder_New.IndexOf($packageInfo[0].New.ToLower()) + $newIndex = $newIndex -eq -1 ? $CustomOrder_New.Count : $newIndex + $CustomOrder_Type = "client", "mgmt", "compat", "spring", "" + $typeIndex = $CustomOrder_Type.IndexOf($packageInfo[0].Type.ToLower()) + $typeIndex = $typeIndex -eq -1 ? $CustomOrder_Type.Count : $typeIndex + $orderServiceMapping[$artifact] = [PSCustomObject][ordered]@{ + NewIndex = $newIndex + TypeIndex = $typeIndex + ServiceName = $serviceName + DisplayName = $packageInfo[0].DisplayName.Trim() + Artifact = $artifact + } } return $orderServiceMapping } @@ -114,10 +126,11 @@ function GenerateDocfxTocContent([Hashtable]$tocContent, [String]$lang, [String] New-Item -Path $YmlPath -Name "toc.yml" -Force $visitedService = @{} # Sort and display toc service name by alphabetical order, and then sort artifact by order. - foreach ($serviceMapping in ($tocContent.GetEnumerator() | Sort-Object Value, Key)) { - $artifact = $serviceMapping.Key - $serviceName = $serviceMapping.Value[0] - $displayName = $serviceMapping.Value[1] + $sortedToc = $tocContent.Values | Sort-Object NewIndex, TypeIndex, ServiceName, DisplayName, Artifact + foreach ($serviceMapping in $sortedToc) { + $artifact = $serviceMapping.Artifact + $serviceName = $serviceMapping.ServiceName + $displayName = $serviceMapping.DisplayName # handle spaces in service name, EG "Confidential Ledger" # handle / in service name, EG "Database for MySQL/PostgreSQL". Leaving a "/" present will generate a bad link location.