127 lines
4.1 KiB
PowerShell
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
|