From 2ab3f4939218368a89bbd3348fb73492430834d8 Mon Sep 17 00:00:00 2001 From: ray chen Date: Mon, 8 Dec 2025 23:30:58 +0000 Subject: [PATCH 1/5] Updated artifactJson input to artifacts input --- .../steps/set-test-pipeline-version.yml | 8 +- eng/common/scripts/SetTestPipelineVersion.ps1 | 89 +++++++++++-------- 2 files changed, 58 insertions(+), 39 deletions(-) diff --git a/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml b/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml index cb4d8ff33334..1e54d16834ba 100644 --- a/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml +++ b/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml @@ -14,9 +14,9 @@ parameters: - name: TestPipeline type: boolean default: false -- name: ArtifactsJson - type: string - default: '' +- name: Artifacts + type: object + default: [] steps: - ${{ if eq(parameters.TestPipeline, true) }}: @@ -31,5 +31,5 @@ steps: -PackageNames '${{ coalesce(parameters.PackageName, parameters.PackageNames) }}' -ServiceDirectory '${{ parameters.ServiceDirectory }}' -TagSeparator '${{ parameters.TagSeparator }}' - -ArtifactsJson '${{ parameters.ArtifactsJson }}' + -Artifacts @('${{ replace(convertToJson(parameters.Artifacts), '''', '`''') }}' | ConvertFrom-Json) pwsh: true diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index dea5496874e8..fc78c2348e53 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -5,63 +5,77 @@ param ( [string]$BuildID, [Parameter(mandatory = $false)] [string]$PackageNames = "", - [Parameter(mandatory = $true)] + [Parameter(mandatory = $false)] [string]$ServiceDirectory, [Parameter(mandatory = $false)] [string]$TagSeparator = "_", [Parameter(mandatory = $false)] - [string]$ArtifactsJson = "" + [object[]]$Artifacts = @() ) . (Join-Path $PSScriptRoot common.ps1) +# Ensure Artifacts is always an array +$Artifacts = @($Artifacts) + Write-Host "PackageNames: $PackageNames" Write-Host "ServiceDirectory: $ServiceDirectory" Write-Host "BuildID: $BuildID" -Write-Host "ArtifactsJson: $ArtifactsJson" - -$packageNamesArray = @() -$artifacts = $null - -# If ArtifactsJson is provided, extract package names from it -if (![String]::IsNullOrWhiteSpace($ArtifactsJson)) { - Write-Host "Using ArtifactsJson to determine package names" - try { - $artifacts = $ArtifactsJson | ConvertFrom-Json - $packageNamesArray = $artifacts | ForEach-Object { $_.name } - Write-Host "Extracted package names from ArtifactsJson: $($packageNamesArray -join ', ')" - } - catch { - LogError "Failed to parse ArtifactsJson: $($_.Exception.Message)" - exit 1 - } -} -elseif (![String]::IsNullOrWhiteSpace($PackageNames)) { - $packageNamesArray = $PackageNames.Split(',') -} -else { - LogError "Either PackageNames or ArtifactsJson must be provided." - exit 1 -} +Write-Host "Artifacts count: $($Artifacts.Count)" -if ($artifacts) { - # When using ArtifactsJson, process each artifact with its name and groupId (if applicable) +if ($Artifacts -and $Artifacts.Count -gt 0) { + # When using Artifacts, process each artifact with its name and groupId (if applicable) try { - foreach ($artifact in $artifacts) { + foreach ($artifact in $Artifacts) { + # Validate required properties + if (-not (Get-Member -InputObject $artifact -Name 'name' -MemberType Properties)) { + LogError "Artifact is missing required 'name' property." + exit 1 + } + $packageName = $artifact.name + if ([String]::IsNullOrWhiteSpace($packageName)) { + LogError "Artifact 'name' property is null or empty." + exit 1 + } + + # Check for ServiceDirectory property + $artifactServiceDirectory = $ServiceDirectory + if (Get-Member -InputObject $artifact -Name 'ServiceDirectory' -MemberType Properties) { + if (![String]::IsNullOrWhiteSpace($artifact.ServiceDirectory)) { + $artifactServiceDirectory = $artifact.ServiceDirectory + } + } + + # Validate ServiceDirectory is available + if ([String]::IsNullOrWhiteSpace($artifactServiceDirectory)) { + LogError "ServiceDirectory is required but not provided for artifact '$packageName'. Provide it via script parameter or artifact property." + exit 1 + } + $newVersion = [AzureEngSemanticVersion]::new("1.0.0") $prefix = "$packageName$TagSeparator" if ($Language -eq "java") { + # Check for groupId property + if (-not (Get-Member -InputObject $artifact -Name 'groupId' -MemberType Properties)) { + LogError "Artifact '$packageName' is missing required 'groupId' property for Java language." + exit 1 + } + $groupId = $artifact.groupId - Write-Host "Processing $packageName with groupId $groupId" if ([String]::IsNullOrWhiteSpace($groupId)) { LogError "GroupId is missing for package $packageName." exit 1 } + + Write-Host "Processing $packageName with groupId $groupId" # Use groupId+artifactName format for tag prefix (e.g., "com.azure.v2+azure-sdk-template_") $prefix = "$groupId+$packageName$TagSeparator" } + else { + Write-Host "Processing $packageName" + } Write-Host "Get Latest Tag : git tag -l $prefix*" $latestTags = git tag -l "$prefix*" @@ -87,21 +101,23 @@ if ($artifacts) { if ($Language -ne "java") { SetPackageVersion -PackageName $packageName ` -Version $newVersion.ToString() ` - -ServiceDirectory $ServiceDirectory + -ServiceDirectory $artifactServiceDirectory } else { SetPackageVersion -PackageName $packageName ` -Version $newVersion.ToString() ` - -ServiceDirectory $ServiceDirectory ` + -ServiceDirectory $artifactServiceDirectory ` -GroupId $groupId } } } catch { - LogError "Failed to process ArtifactsJson: $ArtifactsJson, exception: $($_.Exception.Message)" + LogError "Failed to process Artifacts: exception: $($_.Exception.Message)" exit 1 } -} else { +} elseif (![String]::IsNullOrWhiteSpace($PackageNames)) { # Fallback to original logic when using PackageNames string + $packageNamesArray = @() + $packageNamesArray = $PackageNames.Split(',') foreach ($packageName in $packageNamesArray) { Write-Host "Processing $packageName" $newVersion = [AzureEngSemanticVersion]::new("1.0.0") @@ -131,4 +147,7 @@ if ($artifacts) { -Version $newVersion.ToString() ` -ServiceDirectory $ServiceDirectory } +} else { + LogError "Either PackageNames or Artifacts must be provided." + exit 1 } From 54ad4306071fd95949f4d4f8a721edb0be255f4e Mon Sep 17 00:00:00 2001 From: ray chen Date: Mon, 8 Dec 2025 23:42:45 +0000 Subject: [PATCH 2/5] Prioritized service directory from artifact object over the parameter input --- eng/common/scripts/SetTestPipelineVersion.ps1 | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index fc78c2348e53..4f2e645578b8 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -39,13 +39,16 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { exit 1 } - # Check for ServiceDirectory property - $artifactServiceDirectory = $ServiceDirectory + # Check for ServiceDirectory property if (Get-Member -InputObject $artifact -Name 'ServiceDirectory' -MemberType Properties) { if (![String]::IsNullOrWhiteSpace($artifact.ServiceDirectory)) { $artifactServiceDirectory = $artifact.ServiceDirectory } } + + if ([String]::IsNullOrWhiteSpace($artifactServiceDirectory)) { + $artifactServiceDirectory = $ServiceDirectory + } # Validate ServiceDirectory is available if ([String]::IsNullOrWhiteSpace($artifactServiceDirectory)) { From 408a15a2c1c9597dc2828724dcb083d5bee0b31e Mon Sep 17 00:00:00 2001 From: ray chen Date: Tue, 9 Dec 2025 00:12:46 +0000 Subject: [PATCH 3/5] Returned error when service directory is not provided for the old usage --- eng/common/scripts/SetTestPipelineVersion.ps1 | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index 4f2e645578b8..7380a1eb6c7f 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -119,6 +119,10 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { } } elseif (![String]::IsNullOrWhiteSpace($PackageNames)) { # Fallback to original logic when using PackageNames string + if ([String]::IsNullOrWhiteSpace($ServiceDirectory)) { + LogError "ServiceDirectory is required when using PackageNames." + exit 1 + } $packageNamesArray = @() $packageNamesArray = $PackageNames.Split(',') foreach ($packageName in $packageNamesArray) { From 6e2c0a18740d41463abd8c1f26c4cdc1cc3322e2 Mon Sep 17 00:00:00 2001 From: ray chen Date: Tue, 9 Dec 2025 00:16:14 +0000 Subject: [PATCH 4/5] Removed redudant line --- eng/common/scripts/SetTestPipelineVersion.ps1 | 1 - 1 file changed, 1 deletion(-) diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index 7380a1eb6c7f..ad89fa6c04b3 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -123,7 +123,6 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { LogError "ServiceDirectory is required when using PackageNames." exit 1 } - $packageNamesArray = @() $packageNamesArray = $PackageNames.Split(',') foreach ($packageName in $packageNamesArray) { Write-Host "Processing $packageName" From 442811ddad3681ef3a88f599736b16ef604c9b19 Mon Sep 17 00:00:00 2001 From: ray chen Date: Tue, 9 Dec 2025 00:54:05 +0000 Subject: [PATCH 5/5] Initilized the variable in a loop --- eng/common/scripts/SetTestPipelineVersion.ps1 | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index ad89fa6c04b3..17177a32b573 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -6,6 +6,8 @@ param ( [Parameter(mandatory = $false)] [string]$PackageNames = "", [Parameter(mandatory = $false)] + # ServiceDirectory is required when using PackageNames, + # or when Artifacts do not include their own ServiceDirectory property. [string]$ServiceDirectory, [Parameter(mandatory = $false)] [string]$TagSeparator = "_", @@ -32,14 +34,15 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { LogError "Artifact is missing required 'name' property." exit 1 } - + $packageName = $artifact.name if ([String]::IsNullOrWhiteSpace($packageName)) { LogError "Artifact 'name' property is null or empty." exit 1 } - # Check for ServiceDirectory property + $artifactServiceDirectory = $null + # Check for ServiceDirectory property if (Get-Member -InputObject $artifact -Name 'ServiceDirectory' -MemberType Properties) { if (![String]::IsNullOrWhiteSpace($artifact.ServiceDirectory)) { $artifactServiceDirectory = $artifact.ServiceDirectory @@ -65,13 +68,13 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { LogError "Artifact '$packageName' is missing required 'groupId' property for Java language." exit 1 } - + $groupId = $artifact.groupId if ([String]::IsNullOrWhiteSpace($groupId)) { LogError "GroupId is missing for package $packageName." exit 1 } - + Write-Host "Processing $packageName with groupId $groupId" # Use groupId+artifactName format for tag prefix (e.g., "com.azure.v2+azure-sdk-template_") $prefix = "$groupId+$packageName$TagSeparator" @@ -123,6 +126,7 @@ if ($Artifacts -and $Artifacts.Count -gt 0) { LogError "ServiceDirectory is required when using PackageNames." exit 1 } + $packageNamesArray = $PackageNames.Split(',') foreach ($packageName in $packageNamesArray) { Write-Host "Processing $packageName"