eng/common/scripts/Helpers/Service-Level-Readme-Automation-Helpers.ps1 (123 lines of code) (raw):
function create-service-readme(
$readmeFolder,
$readmeName,
$moniker,
$msService,
$indexTableLink,
$serviceName
) {
$readmePath = Join-Path $readmeFolder -ChildPath $readmeName
$content = ""
if (Test-Path (Join-Path $readmeFolder -ChildPath $indexTableLink)) {
# Escape the close parentheses in the URL. This is required by docs
# https://github.com/Azure/azure-sdk-tools/issues/5433
# This line looks incorrect but the left parameter is a regex and must
# escape the parentheses. The right is a literal string and, since this is
# PowerShell, the backslash does not itself need to be escaped.
# Example: "filename-with-(parens).md" -> "filename-with-(parens\).md"
$escapedIndexTableLink = $indexTableLink -replace '\)', '\)'
$content = "## Packages - $moniker`r`n"
$content += "[!INCLUDE [packages]($escapedIndexTableLink)]"
}
if (!$content) {
LogError "There are no packages under service '$serviceName'. "
return
}
# Generate the front-matter for docs needs
# $Language, $LanguageDisplayName are the variables globally defined in Language-Settings.ps1
$metadataString = GenerateDocsMsMetadata `
-language $Language `
-languageDisplayName $LanguageDisplayName `
-serviceName $serviceName `
-msService $msService
Add-Content -Path $readmePath -Value $metadataString -NoNewline
# Add tables, conbined client and mgmt together.
$readmeHeader = "# Azure $serviceName SDK for $languageDisplayName - $moniker`r`n"
Set-Content -Path $readmePath -Value "$metadataString$readmeHeader$content" -NoNewline
}
# Update the metadata table.
function update-metadata-table($readmeFolder, $readmeName, $serviceName, $msService, $author, $msAuthor)
{
$readmePath = Join-Path $readmeFolder -ChildPath $readmeName
$readmeContent = Get-Content -Path $readmePath -Raw
$match = $readmeContent -match "^---\n*(?<metadata>(.*\n?)*?)---\n*(?<content>(.*\n?)*)"
$restContent = $readmeContent
$metadata = ""
if ($match) {
$restContent = $Matches["content"].trim()
$metadata = $Matches["metadata"].trim()
}
# $Language, $LanguageDisplayName are the variables globally defined in Language-Settings.ps1
$metadataString = GenerateDocsMsMetadata `
-originalMetadata $metadata `
-language $Language `
-languageDisplayName $LanguageDisplayName `
-serviceName $serviceName `
-msService $msService
Set-Content -Path $readmePath -Value "$metadataString$restContent" -NoNewline
}
function generate-markdown-table($readmeFolder, $readmeName, $packageInfos, $moniker) {
$tableHeader = "| Reference | Package | Source |`r`n|---|---|---|`r`n"
$tableContent = ""
$packageInfos = $packageInfos | Sort-Object -Property Type,Package
# Here is the table, the versioned value will
foreach ($pkg in $packageInfos) {
$repositoryLink = "$PackageRepositoryUri/$($pkg.Package)"
if (Test-Path "Function:$GetRepositoryLinkFn") {
$repositoryLink = &$GetRepositoryLinkFn -packageInfo $pkg
}
$packageLevelReadme = ""
if (Test-Path "Function:$GetPackageLevelReadmeFn") {
$packageLevelReadme = &$GetPackageLevelReadmeFn -packageMetadata $pkg
}
$referenceLink = "[$($pkg.DisplayName)]($packageLevelReadme-readme.md)"
if (!(Test-Path (Join-Path $readmeFolder -ChildPath "$packageLevelReadme-readme.md"))) {
$referenceLink = $pkg.DisplayName
}
$githubLink = $GithubUri
if ($pkg.PSObject.Members.Name -contains "DirectoryPath") {
$githubLink = "$GithubUri/blob/main/$($pkg.DirectoryPath)"
}
$line = "|$referenceLink|[$($pkg.Package)]($repositoryLink)|[GitHub]($githubLink)|`r`n"
$tableContent += $line
}
$readmePath = Join-Path $readmeFolder -ChildPath $readmeName
if($tableContent) {
Set-Content -Path $readmePath -Value "$tableHeader$tableContent" -NoNewline -Force
}
}
function generate-service-level-readme(
$docRepoLocation,
$readmeBaseName,
$pathPrefix,
$packageInfos,
$serviceName,
$moniker,
$msService
) {
$readmeFolder = "$docRepoLocation/$pathPrefix/$moniker/"
$serviceReadme = "$readmeBaseName.md"
$indexReadme = "$readmeBaseName-index.md"
if ($packageInfos) {
generate-markdown-table `
-readmeFolder $readmeFolder `
-readmeName $indexReadme `
-packageInfos $packageInfos `
-moniker $moniker
}
if (!(Test-Path "$readmeFolder$serviceReadme") -and $packageInfos) {
create-service-readme `
-readmeFolder $readmeFolder `
-readmeName $serviceReadme `
-moniker $moniker `
-msService $msService `
-indexTableLink $indexReadme `
-serviceName $serviceName
} elseif (Test-Path "$readmeFolder$serviceReadme") {
update-metadata-table `
-readmeFolder $readmeFolder `
-readmeName $serviceReadme `
-serviceName $serviceName `
-msService $msService
}
}