eng/scripts/Generate-Package-Index.ps1 (145 lines of code) (raw):

param ( $language = "all", $releaseFolder = "$PSScriptRoot\..\..\_data\releases\latest", $outputFolder = "." ) Set-StrictMode -Version 3 . (Join-Path $PSScriptRoot PackageList-Helpers.ps1) $releaseFolder = Resolve-Path $releaseFolder $outputFolder = Resolve-Path $outputFolder function MSDocLink($pkg, $linkTemplates) { if ($pkg.MSDocs -eq "NA") { return "" } if ($pkg.MSDocs -ne "") { $msdoclink = $pkg.MSDocs } else { $preSuffix = GetLinkTemplateValue $linkTemplates "pre_suffix" $msdoclink = GetLinkTemplateValue $linkTemplates "msdocs_url_template" $pkg.Package if (!$pkg.VersionGA -and $pkg.VersionPreview -and $preSuffix) { $msdoclink += $preSuffix } } # Make relative link $msdoclink = $msdoclink -replace "https://(docs|learn).microsoft.com(/en-us)?", "" return "[docs]($msdoclink)" } function Get-Heading() { return "| Name | Package | Docs | Source |" + [System.Environment]::NewLine + "| ---- | ------- | ---- | ------ |" + [System.Environment]::NewLine } function Get-Row($pkg, $linkTemplates) { $MDLinkFormat = "{0} [{1}]({2})" $srcLabel = "GitHub" $pkgLabel = GetLinkTemplateValue $linkTemplates "package_label" $displayName = $pkg.DisplayName $version = $pkg.VersionGA if ($version -eq "") { $version = $pkg.VersionPreview } if ($version -eq "") { Write-Warning "No version found for $($pkg.Package) so skipping" return } # GroupId only exists for java so we need to test before we try and access $groupId = $null if ([bool]($pkg.PSobject.Properties.name -match "GroupId")) { $groupId = $pkg.GroupId } if ($pkg.VersionGA -ne "" -and $pkg.VersionPreview -ne "") { $pkgLink = GetLinkTemplateValue $linkTemplates "package_url_template" $pkg.Package $pkg.VersionGA $pkg.RepoPath $groupId $package = $MDLinkFormat -f $pkgLabel, $pkg.VersionGA, $pkgLink $package += "<br>" $pkgLink = GetLinkTemplateValue $linkTemplates "package_url_template" $pkg.Package $pkg.VersionPreview $pkg.RepoPath $groupId $package += $MDLinkFormat -f $pkgLabel, $pkg.VersionPreview, $pkgLink $srcLink = GetLinkTemplateValue $linkTemplates "source_url_template" $pkg.Package $pkg.VersionGA $pkg.RepoPath $source = $MDLinkFormat -f $srcLabel, $pkg.VersionGA, $srcLink if (!$pkg.RepoPath.StartsWith("http")) { $source += "<br>" $srcLink = GetLinkTemplateValue $linkTemplates "source_url_template" $pkg.Package $pkg.VersionPreview $pkg.RepoPath $source += $MDLinkFormat -f $srcLabel, $pkg.VersionPreview, $srcLink } } else { $pkgLink = GetLinkTemplateValue $linkTemplates "package_url_template" $pkg.Package $version $pkg.RepoPath $groupId $package = $MDLinkFormat -f $pkgLabel, $version, $pkgLink $srcLink = GetLinkTemplateValue $linkTemplates "source_url_template" $pkg.Package $version $pkg.RepoPath $source = $MDLinkFormat -f $srcLabel, $version, $srcLink } if ($pkg.RepoPath -eq "NA") { $source = "" } $docs = MSDocLink $pkg $linkTemplates return "| ${displayName} | ${package} | ${docs} | ${source} |" + [System.Environment]::NewLine } function Write-Markdown($lang) { $langLinkTemplates = GetLinkTemplates $lang $packagelistFile = Join-Path $releaseFolder "$lang-packages.csv" $packageList = Get-Content $packagelistFile | ConvertFrom-Csv | Sort-Object Type, DisplayName, Package, GroupId $packageList = $packageList | Where-Object { $_.Hide -ne "true" } $clientPackageList = $packageList | Where-Object { $_.New -eq "true" } $otherPackages = $packageList | Where-Object { !($_.New -eq "true") } $fileContent = Get-Heading foreach($pkg in $clientPackageList) { $fileContent += Get-Row $pkg $langLinkTemplates } $fileLang = $lang if ($lang -eq "js") { $fileLang = "javascript" } $mdfile = Join-Path $outputFolder "$fileLang-new.md" Write-Host "Writing $mdfile" Set-Content $mdfile -Value $fileContent -NoNewline $allPackageList = $clientPackageList + $otherPackages $allFileContent = Get-Heading $deprecated = 0 foreach($pkg in $allPackageList) { if ($pkg.Support -eq 'deprecated') { $deprecated++ } else { $allFileContent += Get-Row $pkg $langLinkTemplates } } Write-Host "Skipped $deprecated deprecated package" $allMdfile = Join-Path $outputFolder "$fileLang-all.md" Write-Host "Writing $allMdfile" Set-Content $allMdfile -Value $allFileContent -NoNewline } switch($language) { "all" { Write-Markdown "java" Write-Markdown "js" Write-Markdown "dotnet" Write-Markdown "python" Write-Markdown "go" break } "java" { Write-Markdown $language break } "js" { Write-Markdown $language break } "dotnet" { Write-Markdown $language break } "python" { Write-Markdown $language break } "go" { Write-Markdown $language break } default { Write-Host "Unrecognized Language: $language" exit 1 } }