1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
<#
.SYNOPSIS
Update docs.microsoft.com CI configuration with provided metadata
.DESCRIPTION
Update docs.microsoft.com CI configuration with metadata in the Azure/azure-sdk
metadata CSV file and information in the docs.microsoft.com repo's own /metadata
folder. The docs.microsoft.com repo's /metadata folder allows onboarding of
packages which have not released to a central package manager.
* Use packages in the Azure/azure-sdk metadata CSV where New == true and
Hide != true
* Add metadata from files in the metadata/ folder to the CSV metadata
* 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 CSV
$csvMetadata = (Get-CSVMetadata).Where({ $_.New -eq 'true' -and $_.Hide -ne 'true' })
# 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
}
}
# Override CSV metadata version information before returning
$outputMetadata = @()
foreach ($item in $csvMetadata) {
if ($metadataByPackage.ContainsKey($item.Package)) {
Write-Host "Overriding CSV metadata from docs repo for $($item.Package)"
$matchingPackage = $metadataByPackage[$item.Package]
# Only update the version from metadata present in the docs repo IF there
# is a specified version. The absence of package metadata in the docs repo
# (e.g. no GA version) does not imply that the CSV metadata is incorrect.
if ($matchingPackage.VersionGA) {
$item.VersionGA = $matchingPackage.VersionGA
}
if ($matchingPackage.VersionPreview) {
$item.VersionPreview = $matchingPackage.VersionPreview
}
}
$outputMetadata += $item
}
# Add entries present in the docs repo which are not present in CSV. These are
# usually packages which have not yet published a preview or GA version.
foreach ($item in $metadataByPackage.Values) {
$matchingPackagesInCsvMetadata = $csvMetadata.Where({ $_.Package -eq $item.Package })
if (!$matchingPackagesInCsvMetadata) {
Write-Host "Adding package from docs metadata that is not found in CSV metadata: $($item.Package)"
$outputMetadata += $item
}
}
return $outputMetadata
}
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
|