From 669fe7e3580fe037cf0d18912031c32c68bad1f7 Mon Sep 17 00:00:00 2001 From: Daniel Jurek Date: Tue, 18 Jul 2023 16:02:57 +0000 Subject: [PATCH 1/3] Update-DocsMsMetadata.ps1 can fail the build on invalid packages --- .../steps/docsms-ensure-validation.yml | 20 +++++++++++ eng/common/scripts/Update-DocsMsMetadata.ps1 | 36 +++++++++++++++---- 2 files changed, 49 insertions(+), 7 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 0000000000..3e6f88d45b --- /dev/null +++ b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml @@ -0,0 +1,20 @@ +steps: +# Fail the build if any of the packages failed validation. Valid values are +# "true" or "false" though some attempt is made to parse the boolean value from +# the string. +- pwsh: | + $value = '$(DocsMsPackagesAllValid)' + + try { + $result = [System.Convert]::ToBoolean($value) + if (!$result) { + Write-Error "Some packages failed validation" + exit 1 + } + + Write-Host "All packages passed validation" + } catch { + Write-Error "Failed to parse DocsMsPackagesAllValid value '$value' as a boolean." + exit 1 + } + displayName: Check package validation results diff --git a/eng/common/scripts/Update-DocsMsMetadata.ps1 b/eng/common/scripts/Update-DocsMsMetadata.ps1 index 8026a5a6e0..9dc07e3995 100644 --- a/eng/common/scripts/Update-DocsMsMetadata.ps1 +++ b/eng/common/scripts/Update-DocsMsMetadata.ps1 @@ -230,17 +230,39 @@ 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..." +$allSucceeded = $true +foreach ($packageInfoLocation in $PackageInfoJsonLocations) { - $packageInfos = @($PackageInfoJsonLocations | ForEach-Object { GetPackageInfoJson $_ }) + if ($ValidateDocsMsPackagesFn -and (Test-Path "Function:$ValidateDocsMsPackagesFn")) { + Write-Host "Validating the packages..." - &$ValidateDocsMsPackagesFn -PackageInfos $packageInfos -PackageSourceOverride $PackageSourceOverride -DocValidationImageId $DocValidationImageId -DocRepoLocation $DocRepoLocation -} + $packageInfo = GetPackageInfoJson $packageInfoLocation + # "Validate-${Language}-DocMsPackages" + $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" +} From 462ec22696ccd22762b209d361f91488667083e7 Mon Sep 17 00:00:00 2001 From: Daniel Jurek Date: Tue, 18 Jul 2023 18:05:02 +0000 Subject: [PATCH 2/3] Better error handling and logging --- .../pipelines/templates/steps/docsms-ensure-validation.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml index 3e6f88d45b..1bb21e349a 100644 --- a/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml +++ b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml @@ -13,8 +13,9 @@ steps: } Write-Host "All packages passed validation" - } catch { - Write-Error "Failed to parse DocsMsPackagesAllValid value '$value' as a boolean." + } catch [FormatException] { + Write-Host "Failed to parse DocsMsPackagesAllValid value '$value' as a boolean." + Write-Error $_ exit 1 } displayName: Check package validation results From 0db9e0591384fa1aabbefdbbadbe8358e8a2a8ce Mon Sep 17 00:00:00 2001 From: Daniel Jurek Date: Tue, 18 Jul 2023 23:12:33 +0000 Subject: [PATCH 3/3] Review feedback --- .../steps/docsms-ensure-validation.yml | 22 +++++-------------- eng/common/scripts/Update-DocsMsMetadata.ps1 | 3 ++- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml index 1bb21e349a..135352fc3d 100644 --- a/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml +++ b/eng/common/pipelines/templates/steps/docsms-ensure-validation.yml @@ -1,21 +1,11 @@ steps: # Fail the build if any of the packages failed validation. Valid values are -# "true" or "false" though some attempt is made to parse the boolean value from -# the string. +# "true" or "false" - pwsh: | - $value = '$(DocsMsPackagesAllValid)' - - try { - $result = [System.Convert]::ToBoolean($value) - if (!$result) { - Write-Error "Some packages failed validation" - exit 1 - } - - Write-Host "All packages passed validation" - } catch [FormatException] { - Write-Host "Failed to parse DocsMsPackagesAllValid value '$value' as a boolean." - Write-Error $_ - exit 1 + 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 9dc07e3995..94aa8c1efe 100644 --- a/eng/common/scripts/Update-DocsMsMetadata.ps1 +++ b/eng/common/scripts/Update-DocsMsMetadata.ps1 @@ -237,7 +237,8 @@ foreach ($packageInfoLocation in $PackageInfoJsonLocations) { Write-Host "Validating the packages..." $packageInfo = GetPackageInfoJson $packageInfoLocation - # "Validate-${Language}-DocMsPackages" + # This calls a function named "Validate-${Language}-DocMsPackages" + # declared in common.ps1, implemented in Language-Settings.ps1 $isValid = &$ValidateDocsMsPackagesFn ` -PackageInfos $packageInfo ` -PackageSourceOverride $PackageSourceOverride `