Sync eng/common directory with azure-sdk-tools for PR 6895 (#4948)

* Add legacy moniker migration logic

* Add functionality from Java testing

---------

Co-authored-by: Daniel Jurek <djurek@microsoft.com>
This commit is contained in:
Azure SDK Bot 2023-09-13 13:28:58 -07:00 committed by GitHub
parent 165eace629
commit 309cab82a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 128 additions and 3 deletions

View File

@ -40,7 +40,10 @@ param(
[string]$ClientSecret,
[Parameter(Mandatory = $false)]
[string]$ReadmeFolderRoot = "docs-ref-services"
[string]$ReadmeFolderRoot = "docs-ref-services",
[Parameter(Mandatory = $false)]
[array]$Monikers = @('latest', 'preview', 'legacy')
)
. $PSScriptRoot/common.ps1
. $PSScriptRoot/Helpers/Service-Level-Readme-Automation-Helpers.ps1
@ -50,8 +53,7 @@ param(
Set-StrictMode -Version 3
$fullMetadata = Get-CSVMetadata
$monikers = @("latest", "preview")
foreach($moniker in $monikers) {
foreach($moniker in $Monikers) {
# The onboarded packages return is key-value pair, which key is the package index, and value is the package info from {metadata}.json
# E.g.
# Key as: @azure/storage-blob

View File

@ -0,0 +1,122 @@
<#
.SYNOPSIS
Move metadata JSON and package-level overview markdown files for deprecated packages to the legacy folder.
.DESCRIPTION
Move onboarding information to the "legacy" moniker for whose support is "deprecated" in the Metadata CSV.
Only one version of a package can be documented in the "legacy" moniker. If multiple versions are available,
the "latest" version will be used and the "preview" version will be deleted.
.PARAMETER DocRepoLocation
The location of the target docs repository.
#>
param(
[Parameter(Mandatory = $true)]
[string] $DocRepoLocation
)
. (Join-Path $PSScriptRoot common.ps1)
Set-StrictMode -Version 3
function getPackageMetadata($moniker) {
$jsonFiles = Get-ChildItem -Path (Join-Path $DocRepoLocation "metadata/$moniker") -Filter *.json
$metadata = @{}
foreach ($jsonFile in $jsonFiles) {
$packageMetadata = Get-Content $jsonFile -Raw | ConvertFrom-Json -AsHashtable
$packageIdentity = $packageMetadata.Name
if (Test-Path "Function:$GetPackageIdentity") {
$packageIdentity = &$GetPackageIdentity $packageMetadata
}
$metadata[$packageIdentity] = @{ File = $jsonFile; Metadata = $packageMetadata }
}
return $metadata
}
function getPackageInfoFromLookup($packageIdentity, $version, $lookupTable) {
if ($lookupTable.ContainsKey($packageIdentity)) {
if ($lookupTable[$packageIdentity]['Metadata'].Version -eq $version) {
# Only return if the version matches
return $lookupTable[$packageIdentity]
}
}
return $null
}
function moveToLegacy($packageInfo) {
$docsMsMetadata = &$GetDocsMsMetadataForPackageFn -PackageInfo $packageInfo['Metadata']
Write-Host "Move to legacy: $($packageInfo['Metadata'].Name)"
$packageInfoPath = $packageInfo['File']
Move-Item "$($packageInfoPath.Directory)/$($packageInfoPath.BaseName).*" "$DocRepoLocation/metadata/legacy/" -Force
$readmePath = "$DocRepoLocation/$($docsMsMetadata.PreviewReadMeLocation)/$($docsMsMetadata.DocsMsReadMeName)-readme.md"
if (Test-Path $readmePath) {
Move-Item `
$readmePath `
"$DocRepoLocation/$($docsMsMetadata.LegacyReadMeLocation)/" `
-Force
}
}
function deletePackageInfo($packageInfo) {
$docsMsMetadata = &$GetDocsMsMetadataForPackageFn -PackageInfo $packageInfo['Metadata']
Write-Host "Delete superseded package: $($packageInfo['Metadata'].Name)"
$packageInfoPath = $packageInfo['File']
Remove-Item "$($packageInfoPath.Directory)/$($packageInfoPath.BaseName).*" -Force
$readmePath = "$DocRepoLocation/$($docsMsMetadata.PreviewReadMeLocation)/$($docsMsMetadata.DocsMsReadMeName)-readme.md"
if (Test-Path $readmePath) {
Remove-Item $readmePath -Force
}
}
$metadataLookup = @{
'latest' = getPackageMetadata 'latest'
'preview' = getPackageMetadata 'preview'
}
$deprecatedPackages = (Get-CSVMetadata).Where({ $_.Support -eq 'deprecated' })
foreach ($package in $deprecatedPackages) {
$packageIdentity = $package.Package
if (Test-Path "Function:$GetPackageIdentityFromCsvMetadata") {
$packageIdentity = &$GetPackageIdentityFromCsvMetadata $package
}
$packageInfoPreview = $packageInfoLatest = $null
if ($package.VersionPreview) {
$packageInfoPreview = getPackageInfoFromLookup `
-packageIdentity $packageIdentity `
-version $package.VersionPreview `
-lookupTable $metadataLookup['preview']
}
if ($package.VersionGA) {
$packageInfoLatest = getPackageInfoFromLookup `
-packageIdentity $packageIdentity `
-version $package.VersionGA `
-lookupTable $metadataLookup['latest']
}
if (!$packageInfoPreview -and !$packageInfoLatest) {
# Nothing to move or delete
continue
}
if ($packageInfoPreview -and $packageInfoLatest) {
# Delete metadata JSON and package-level overview markdown files for
# the preview version instead of moving both. This mitigates situations
# where the "latest" verison doesn't have a package-level overview
# markdown file and the "preview" version does.
deletePackageInfo $packageInfoPreview
moveToLegacy $packageInfoLatest
} else {
moveToLegacy ($packageInfoPreview ?? $packageInfoLatest)
}
}

View File

@ -67,3 +67,4 @@ $GetEmitterPackageLockPathFn = "Get-${Language}-EmitterPackageLockPath"
$SetDocsPackageOnboarding = "Set-${Language}-DocsPackageOnboarding"
$GetDocsPackagesAlreadyOnboarded = "Get-${Language}-DocsPackagesAlreadyOnboarded"
$GetPackageIdentity = "Get-${Language}-PackageIdentity"
$GetPackageIdentityFromCsvMetadata = "Get-${Language}-PackageIdentityFromCsvMetadata"