From cdfabe3cc5da51468e551796e9031e56e5637dbc Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Tue, 18 Jul 2023 21:33:10 -0700 Subject: [PATCH] Sync eng/common directory with azure-sdk-tools for PR 6530 (#4801) * Update-DocsMsMetadata.ps1 can fail the build on invalid packages * Better error handling and logging * Review feedback --------- Co-authored-by: Daniel Jurek --- .../steps/docsms-ensure-validation.yml | 11 +++++ eng/common/scripts/Update-DocsMsMetadata.ps1 | 41 +++++++++++++++---- 2 files changed, 43 insertions(+), 9 deletions(-) create mode 100644 eng/common/pipelines/templates/steps/docsms-ensure-validation.yml diff --git a/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml new file mode 100644 index 000000000..135352fc3 --- /dev/null +++ b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml @@ -0,0 +1,11 @@ +steps: +# Fail the build if any of the packages failed validation. Valid values are +# "true" or "false" +- pwsh: | + if ('$(DocsMsPackagesAllValid)' -eq 'true') { + Write-Host "All packages passed validation." + } else { + Write-Error "Some packages failed validation." + exit 1 + } + displayName: Check package validation results diff --git a/eng/common/scripts/Update-DocsMsMetadata.ps1 b/eng/common/scripts/Update-DocsMsMetadata.ps1 index 8026a5a6e..94aa8c1ef 100644 --- a/eng/common/scripts/Update-DocsMsMetadata.ps1 +++ b/eng/common/scripts/Update-DocsMsMetadata.ps1 @@ -230,17 +230,40 @@ function UpdateDocsMsMetadataForPackage($packageInfoJsonLocation) { Set-Content -Path $readmeLocation -Value $outputReadmeContent } -# For daily update and release, validate DocsMS publishing using the language-specific validation function -if ($ValidateDocsMsPackagesFn -and (Test-Path "Function:$ValidateDocsMsPackagesFn")) { - Write-Host "Validating the packages..." - - $packageInfos = @($PackageInfoJsonLocations | ForEach-Object { GetPackageInfoJson $_ }) - - &$ValidateDocsMsPackagesFn -PackageInfos $packageInfos -PackageSourceOverride $PackageSourceOverride -DocValidationImageId $DocValidationImageId -DocRepoLocation $DocRepoLocation -} - +$allSucceeded = $true foreach ($packageInfoLocation in $PackageInfoJsonLocations) { + + if ($ValidateDocsMsPackagesFn -and (Test-Path "Function:$ValidateDocsMsPackagesFn")) { + Write-Host "Validating the packages..." + + $packageInfo = GetPackageInfoJson $packageInfoLocation + # This calls a function named "Validate-${Language}-DocMsPackages" + # declared in common.ps1, implemented in Language-Settings.ps1 + $isValid = &$ValidateDocsMsPackagesFn ` + -PackageInfos $packageInfo ` + -PackageSourceOverride $PackageSourceOverride ` + -DocValidationImageId $DocValidationImageId ` + -DocRepoLocation $DocRepoLocation + + if (!$isValid) { + Write-Host "Package validation failed for package: $packageInfoLocation" + $allSucceeded = $false + + # Skip the later call to UpdateDocsMsMetadataForPackage because this + # package has not passed validation + continue + } + } + Write-Host "Updating metadata for package: $packageInfoLocation" # Convert package metadata json file to metadata json property. UpdateDocsMsMetadataForPackage $packageInfoLocation } + +# Set a variable which will be used by the pipeline later to fail the build if +# any packages failed validation +if ($allSucceeded) { + Write-Host "##vso[task.setvariable variable=DocsMsPackagesAllValid;]$true" +} else { + Write-Host "##vso[task.setvariable variable=DocsMsPackagesAllValid;]$false" +}