From 38c7bb153306d900fc57d5278350571a9c05853f 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:12 -0700 Subject: [PATCH] Sync eng/common directory with azure-sdk-tools for PR 6530 (#21199) * 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 | 39 +++++++++++++++---- 2 files changed, 42 insertions(+), 8 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 000000000000..135352fc3d63 --- /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 8026a5a6e08d..94aa8c1efe1b 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 $_ }) +$allSucceeded = $true +foreach ($packageInfoLocation in $PackageInfoJsonLocations) { - &$ValidateDocsMsPackagesFn -PackageInfos $packageInfos -PackageSourceOverride $PackageSourceOverride -DocValidationImageId $DocValidationImageId -DocRepoLocation $DocRepoLocation -} + 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 + } + } -foreach ($packageInfoLocation in $PackageInfoJsonLocations) { 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" +}