Sync eng/common directory with azure-sdk-tools for PR 9862 (#6428)

* Get-PRPkgProperties now honors artifact-list specific absolute/relative paths to other triggering folders. This will supplant the common "if eng/ changes include template and core" in a follow-up PR.

---------

Co-authored-by: Scott Beddall <scbedd@microsoft.com>
This commit is contained in:
Azure SDK Bot 2025-02-20 16:30:18 -08:00 committed by GitHub
parent 4d52ec202f
commit 429f81b88f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 45 additions and 1 deletions

View File

@ -155,7 +155,7 @@ function GetValueSafelyFrom-Yaml {
)
$current = $YamlContentAsHashtable
foreach ($key in $Keys) {
if ($current.ContainsKey($key) -or $current[$key]) {
if ($current -is [HashTable] -and ($current.ContainsKey($key) -or $current[$key])) {
$current = $current[$key]
}
else {

View File

@ -126,6 +126,7 @@ class PackageProps {
if ($ciArtifactResult) {
$this.ArtifactDetails = [Hashtable]$ciArtifactResult.ArtifactConfig
$this.CIParameters["CIMatrixConfigs"] = @()
# if we know this is the matrix for our file, we should now see if there is a custom matrix config for the package
$matrixConfigList = GetValueSafelyFrom-Yaml $ciArtifactResult.ParsedYml @("extends", "parameters", "MatrixConfigs")
@ -196,11 +197,22 @@ function Get-PrPkgProperties([string]$InputDiffJson) {
$additionalValidationPackages = @()
$lookup = @{}
# this is the primary loop that identifies the packages that have changes
foreach ($pkg in $allPackageProperties) {
$pkgDirectory = Resolve-Path "$($pkg.DirectoryPath)"
$lookupKey = ($pkg.DirectoryPath).Replace($RepoRoot, "").TrimStart('\/')
$lookup[$lookupKey] = $pkg
# we only honor the individual artifact triggers
# if we were to honor the ci-level triggers, we would simply
# end up in a situation where any change to a service would
# still trigger every package in that service. individual package triggers
# must be added to handle this.
$triggeringPaths = @()
if ($pkg.ArtifactDetails -and $pkg.ArtifactDetails["triggeringPaths"]) {
$triggeringPaths = $pkg.ArtifactDetails["triggeringPaths"]
}
foreach ($file in $targetedFiles) {
$shouldExclude = $false
foreach ($exclude in $excludePaths) {
@ -213,7 +225,28 @@ function Get-PrPkgProperties([string]$InputDiffJson) {
continue
}
$filePath = (Join-Path $RepoRoot $file)
$shouldInclude = $filePath -like (Join-Path "$pkgDirectory" "*")
# this implementation guesses the working directory of the ci.yml
foreach($triggerPath in $triggeringPaths) {
$resolvedRelativePath = (Join-Path $RepoRoot $triggerPath)
# utilize the various trigger paths against the targeted file here
if (!$triggerPath.StartsWith("/")){
$resolvedRelativePath = (Join-Path $RepoRoot "sdk" "$($pkg.ServiceDirectory)" $triggerPath)
}
# if we are including this package due to one of its additional trigger paths, we need
# to ensure we're counting it as included for validation, not as an actual package change
if ($resolvedRelativePath) {
$includedForValidation = $filePath -like (Join-Path "$resolvedRelativePath" "*")
$shouldInclude = $shouldInclude -or $includedForValidation
if ($includedForValidation) {
$pkg.IncludedForValidation = $true
}
}
}
if ($shouldInclude) {
$packagesWithChanges += $pkg
@ -227,6 +260,9 @@ function Get-PrPkgProperties([string]$InputDiffJson) {
}
}
# add all of the packages that were added purely for validation purposes
# this is executed separately because we need to identify packages added this way as only included for validation
# we don't actually need to build or analyze them. only test them.
$existingPackageNames = @($packagesWithChanges | ForEach-Object { $_.Name })
foreach ($addition in $additionalValidationPackages) {
$key = $addition.Replace($RepoRoot, "").TrimStart('\/')
@ -241,10 +277,18 @@ function Get-PrPkgProperties([string]$InputDiffJson) {
}
}
# now pass along the set of packages we've identified, the diff itself, and the full set of package properties
# to locate any additional packages that should be included for validation
if ($AdditionalValidationPackagesFromPackageSetFn -and (Test-Path "Function:$AdditionalValidationPackagesFromPackageSetFn")) {
$packagesWithChanges += &$AdditionalValidationPackagesFromPackageSetFn $packagesWithChanges $diff $allPackageProperties
}
# finally, if we have gotten all the way here and we still don't have any packages, we should include the template service
# packages. We should never return NO validation.
if ($packagesWithChanges.Count -eq 0) {
$packagesWithChanges += ($allPackageProperties | Where-Object { $_.ServiceDirectory -eq "template" })
}
return $packagesWithChanges
}