...

Text file src/github.com/Azure/azure-sdk-for-go/eng/common/scripts/Update-DocsMsPackages.ps1

Documentation: github.com/Azure/azure-sdk-for-go/eng/common/scripts

     1<#
     2.SYNOPSIS
     3Update docs.microsoft.com CI configuration with provided metadata
     4
     5.DESCRIPTION
     6Update docs.microsoft.com CI configuration with metadata in the Azure/azure-sdk
     7metadata CSV file and information in the docs.microsoft.com repo's own /metadata
     8folder. The docs.microsoft.com repo's /metadata folder allows onboarding of
     9packages which have not released to a central package manager.
    10
    11* Use packages in the Azure/azure-sdk metadata CSV where New == true and 
    12  Hide != true
    13* Add metadata from files in the metadata/ folder to the CSV metadata
    14* Onboard new packages, update existing tracked packages, leave other packages
    15  in place. (This is implemented on a per-language basis by 
    16  $UpdateDocsMsPackagesFn)
    17
    18.PARAMETER DocRepoLocation
    19Location of the docs.microsoft.com reference docs repo.
    20
    21.PARAMETER PackageSourceOverride
    22Optional parameter to supply a different package source (useful for daily dev
    23docs generation from pacakges which are not published to the default feed). This
    24variable is meant to be used in the domain-specific business logic in
    25&$UpdateDocsMsPackagesFn
    26
    27.PARAMETER ImageId
    28Optional The docker image for package validation in format of '$containerRegistry/$imageName:$tag'. 
    29e.g. azuresdkimages.azurecr.io/jsrefautocr:latest
    30
    31#>
    32param (
    33  [Parameter(Mandatory = $true)]
    34  [string] $DocRepoLocation, # the location of the cloned doc repo
    35
    36  [Parameter(Mandatory = $false)]
    37  [string] $PackageSourceOverride,
    38
    39  [Parameter(Mandatory = $false)]
    40  [string] $ImageId
    41)
    42
    43. (Join-Path $PSScriptRoot common.ps1)
    44
    45function GetDocsMetadataForMoniker($moniker) { 
    46  $searchPath = Join-Path $DocRepoLocation 'metadata' $moniker
    47  if (!(Test-Path $searchPath)) { 
    48    return @() 
    49  }
    50  $paths = Get-ChildItem -Path $searchPath -Filter *.json
    51
    52  $metadata = @() 
    53  foreach ($path in $paths) { 
    54    $fileContents = Get-Content $path -Raw
    55    $fileObject = ConvertFrom-Json -InputObject $fileContents
    56    $versionGa = ''
    57    $versionPreview = '' 
    58    if ($moniker -eq 'latest') { 
    59      $versionGa = $fileObject.Version
    60    } else { 
    61      $versionPreview = $fileObject.Version
    62    }
    63
    64    $entry = @{
    65      Package = $fileObject.Name; 
    66      VersionGA = $versionGa;
    67      VersionPreview = $versionPreview;
    68      RepoPath = $fileObject.ServiceDirectory;
    69      Type = $fileObject.SdkType;
    70      New = $fileObject.IsNewSdk;
    71    }
    72    if ($fileObject.PSObject.Members.Name -contains "Group")
    73    {
    74      $entry.Add("GroupId", $fileObject.Group)
    75    }
    76    $metadata += $entry
    77  }
    78
    79  return $metadata
    80}
    81function GetDocsMetadata() {
    82  # Read metadata from CSV
    83  $csvMetadata = (Get-CSVMetadata).Where({ $_.New -eq 'true' -and $_.Hide -ne 'true' })
    84
    85  # Read metadata from docs repo
    86  $metadataByPackage = @{}
    87  foreach ($package in GetDocsMetadataForMoniker 'latest') { 
    88    if ($metadataByPackage.ContainsKey($package.Package)) { 
    89      LogWarning "Duplicate package in latest metadata: $($package.Package)"
    90    }
    91    Write-Host "Adding latest package: $($package.Package)"
    92    $metadataByPackage[$package.Package] = $package
    93  }
    94
    95  foreach ($package in GetDocsMetadataForMoniker 'preview') {
    96    if ($metadataByPackage.ContainsKey($package.Package)) {
    97      # Merge VersionPreview of each object
    98      Write-Host "Merging preview package version for $($package.Package))"
    99      $metadataByPackage[$package.Package].VersionPreview = $package.VersionPreview
   100    } else {
   101      Write-Host "Adding preview package: $($package.Package)"
   102      $metadataByPackage[$package.Package] = $package
   103    }
   104  }
   105
   106  # Override CSV metadata version information before returning
   107  $outputMetadata = @()
   108  foreach ($item in $csvMetadata) {
   109    if ($metadataByPackage.ContainsKey($item.Package)) {
   110      Write-Host "Overriding CSV metadata from docs repo for $($item.Package)"
   111      $matchingPackage = $metadataByPackage[$item.Package]
   112
   113      # Only update the version from metadata present in the docs repo IF there
   114      # is a specified version. The absence of package metadata in the docs repo
   115      # (e.g. no GA version) does not imply that the CSV metadata is incorrect.
   116      if ($matchingPackage.VersionGA) {
   117        $item.VersionGA = $matchingPackage.VersionGA
   118      }
   119      if ($matchingPackage.VersionPreview) { 
   120        $item.VersionPreview = $matchingPackage.VersionPreview
   121      }
   122    }
   123    $outputMetadata += $item
   124  }
   125
   126  # Add entries present in the docs repo which are not present in CSV. These are
   127  # usually packages which have not yet published a preview or GA version.
   128  foreach ($item in $metadataByPackage.Values) { 
   129    $matchingPackagesInCsvMetadata = $csvMetadata.Where({ $_.Package -eq $item.Package })
   130    if (!$matchingPackagesInCsvMetadata) { 
   131      Write-Host "Adding package from docs metadata that is not found in CSV metadata: $($item.Package)"
   132      $outputMetadata  += $item
   133    }
   134  }
   135
   136  return $outputMetadata
   137}
   138
   139if ($UpdateDocsMsPackagesFn -and (Test-Path "Function:$UpdateDocsMsPackagesFn")) {
   140
   141  try {
   142    $docsMetadata = GetDocsMetadata
   143    &$UpdateDocsMsPackagesFn -DocsRepoLocation $DocRepoLocation -DocsMetadata $docsMetadata -PackageSourceOverride $PackageSourceOverride -DocValidationImageId $ImageId
   144  } catch { 
   145    LogError "Exception while updating docs.ms packages"
   146    LogError $_ 
   147    LogError $_.ScriptStackTrace
   148    exit 1
   149  }
   150  
   151} else {
   152  LogError "The function for '$UpdateFn' was not found.`
   153  Make sure it is present in eng/scripts/Language-Settings.ps1 and referenced in eng/common/scripts/common.ps1.`
   154  See https://github.com/Azure/azure-sdk-tools/blob/main/doc/common/common_engsys.md#code-structure"
   155  exit 1
   156}
   157
   158# Exit 0 so DevOps doesn't fail the build when the last command called by the
   159# domain-specific function exited with a non-zero exit code.
   160exit 0

View as plain text