azure-sdk-for-cpp/eng/common/scripts/Update-DocsMsPackages.ps1
Azure SDK Bot 72cdbaa0fe
Make Json files the source of truth for DocsMS (#4681)
Co-authored-by: James Suplizio <jasupliz@microsoft.com>
2023-06-01 10:14:06 -07:00

127 lines
4.1 KiB
PowerShell

<#
.SYNOPSIS
Update docs.microsoft.com CI configuration with provided metadata
.DESCRIPTION
Update docs.microsoft.com CI configuration with metadata in the docs.microsoft.com repo's
/metadata folder. The docs.microsoft.com repo's /metadata folder allows onboarding of
packages which have not released to a central package manager.
* Onboard new packages, update existing tracked packages, leave other packages
in place. (This is implemented on a per-language basis by
$UpdateDocsMsPackagesFn)
.PARAMETER DocRepoLocation
Location of the docs.microsoft.com reference docs repo.
.PARAMETER PackageSourceOverride
Optional parameter to supply a different package source (useful for daily dev
docs generation from pacakges which are not published to the default feed). This
variable is meant to be used in the domain-specific business logic in
&$UpdateDocsMsPackagesFn
.PARAMETER ImageId
Optional The docker image for package validation in format of '$containerRegistry/$imageName:$tag'.
e.g. azuresdkimages.azurecr.io/jsrefautocr:latest
#>
param (
[Parameter(Mandatory = $true)]
[string] $DocRepoLocation, # the location of the cloned doc repo
[Parameter(Mandatory = $false)]
[string] $PackageSourceOverride,
[Parameter(Mandatory = $false)]
[string] $ImageId
)
. (Join-Path $PSScriptRoot common.ps1)
function GetDocsMetadataForMoniker($moniker) {
$searchPath = Join-Path $DocRepoLocation 'metadata' $moniker
if (!(Test-Path $searchPath)) {
return @()
}
$paths = Get-ChildItem -Path $searchPath -Filter *.json
$metadata = @()
foreach ($path in $paths) {
$fileContents = Get-Content $path -Raw
$fileObject = ConvertFrom-Json -InputObject $fileContents
$versionGa = ''
$versionPreview = ''
if ($moniker -eq 'latest') {
$versionGa = $fileObject.Version
} else {
$versionPreview = $fileObject.Version
}
$entry = @{
Package = $fileObject.Name;
VersionGA = $versionGa;
VersionPreview = $versionPreview;
RepoPath = $fileObject.ServiceDirectory;
Type = $fileObject.SdkType;
New = $fileObject.IsNewSdk;
}
if ($fileObject.PSObject.Members.Name -contains "Group")
{
$entry.Add("GroupId", $fileObject.Group)
}
$metadata += $entry
}
return $metadata
}
function GetDocsMetadata() {
# Read metadata from docs repo
$metadataByPackage = @{}
foreach ($package in GetDocsMetadataForMoniker 'latest') {
if ($metadataByPackage.ContainsKey($package.Package)) {
LogWarning "Duplicate package in latest metadata: $($package.Package)"
}
Write-Host "Adding latest package: $($package.Package)"
$metadataByPackage[$package.Package] = $package
}
foreach ($package in GetDocsMetadataForMoniker 'preview') {
if ($metadataByPackage.ContainsKey($package.Package)) {
# Merge VersionPreview of each object
Write-Host "Merging preview package version for $($package.Package))"
$metadataByPackage[$package.Package].VersionPreview = $package.VersionPreview
} else {
Write-Host "Adding preview package: $($package.Package)"
$metadataByPackage[$package.Package] = $package
}
}
# TODO - Add a call to GetDocsMetadataForMoniker for 'legacy' when that is implemented
return $metadataByPackage.Values
}
if ($UpdateDocsMsPackagesFn -and (Test-Path "Function:$UpdateDocsMsPackagesFn")) {
try {
$docsMetadata = GetDocsMetadata
&$UpdateDocsMsPackagesFn -DocsRepoLocation $DocRepoLocation -DocsMetadata $docsMetadata -PackageSourceOverride $PackageSourceOverride -DocValidationImageId $ImageId
} catch {
LogError "Exception while updating docs.ms packages"
LogError $_
LogError $_.ScriptStackTrace
exit 1
}
} else {
LogError "The function for '$UpdateFn' was not found.`
Make sure it is present in eng/scripts/Language-Settings.ps1 and referenced in eng/common/scripts/common.ps1.`
See https://github.com/Azure/azure-sdk-tools/blob/main/doc/common/common_engsys.md#code-structure"
exit 1
}
# Exit 0 so DevOps doesn't fail the build when the last command called by the
# domain-specific function exited with a non-zero exit code.
exit 0