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 61d49cdb7d..747687b899 100644 --- a/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml +++ b/eng/common/pipelines/templates/steps/set-test-pipeline-version.yml @@ -1,9 +1,22 @@ parameters: - PackageName: '' - PackageNames: '' - ServiceDirectory: '' - TagSeparator: '_' - TestPipeline: false +- name: PackageName + type: string + default: '' +- name: PackageNames + type: string + default: '' +- name: ServiceDirectory + type: string + default: '' +- name: TagSeparator + type: string + default: '_' +- name: TestPipeline + type: boolean + default: false +- name: ArtifactsJson + type: string + default: '' steps: - ${{ if eq(parameters.TestPipeline, 'true') }}: @@ -18,4 +31,5 @@ steps: -PackageNames '${{ coalesce(parameters.PackageName, parameters.PackageNames) }}' -ServiceDirectory '${{ parameters.ServiceDirectory }}' -TagSeparator '${{ parameters.TagSeparator }}' + -ArtifactsJson '${{ parameters.ArtifactsJson }}' pwsh: true diff --git a/eng/common/scripts/SetTestPipelineVersion.ps1 b/eng/common/scripts/SetTestPipelineVersion.ps1 index 2b2ee70ef9..6d26830091 100644 --- a/eng/common/scripts/SetTestPipelineVersion.ps1 +++ b/eng/common/scripts/SetTestPipelineVersion.ps1 @@ -3,12 +3,14 @@ param ( [Parameter(mandatory = $true)] [string]$BuildID, - [Parameter(mandatory = $true)] - [string]$PackageNames, + [Parameter(mandatory = $false)] + [string]$PackageNames = "", [Parameter(mandatory = $true)] [string]$ServiceDirectory, [Parameter(mandatory = $false)] - [string]$TagSeparator = "_" + [string]$TagSeparator = "_", + [Parameter(mandatory = $false)] + [string]$ArtifactsJson = "" ) . (Join-Path $PSScriptRoot common.ps1) @@ -16,43 +18,117 @@ param ( Write-Host "PackageNames: $PackageNames" Write-Host "ServiceDirectory: $ServiceDirectory" Write-Host "BuildID: $BuildID" +Write-Host "ArtifactsJson: $ArtifactsJson" $packageNamesArray = @() +$artifacts = $null -if ([String]::IsNullOrWhiteSpace($PackageNames)) { - LogError "PackageNames cannot be empty." - exit 1 +# 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 + } } -else { +elseif (![String]::IsNullOrWhiteSpace($PackageNames)) { $packageNamesArray = $PackageNames.Split(',') } +else { + LogError "Either PackageNames or ArtifactsJson must be provided." + exit 1 +} -foreach ($packageName in $packageNamesArray) { - Write-Host "Processing $packageName" - $newVersion = [AzureEngSemanticVersion]::new("1.0.0") - $prefix = "$packageName$TagSeparator" - Write-Host "Get Latest Tag : git tag -l $prefix*" - $latestTags = git tag -l "$prefix*" +if ($artifacts) { + # When using ArtifactsJson, process each artifact with its name and groupId (if applicable) + try { + foreach ($artifact in $artifacts) { + $packageName = $artifact.name + $newVersion = [AzureEngSemanticVersion]::new("1.0.0") + $prefix = "$packageName$TagSeparator" - $semVars = @() + if ($Language -eq "java") { + $groupId = $artifact.groupId + Write-Host "Processing $packageName with groupId $groupId" + if ([String]::IsNullOrWhiteSpace($groupId)) { + LogError "GroupId is missing for package $packageName." + exit 1 + } + # Use groupId+artifactName format for tag prefix (e.g., "com.azure.v2+azure-sdk-template_") + $prefix = "$groupId+$packageName$TagSeparator" + } - if ($latestTags -and ($latestTags.Length -gt 0)) { - foreach ($tag in $latestTags) { - $semVars += $tag.Substring($prefix.Length) - } + Write-Host "Get Latest Tag : git tag -l $prefix*" + $latestTags = git tag -l "$prefix*" + + $semVars = @() - $semVarsSorted = [AzureEngSemanticVersion]::SortVersionStrings($semVars) - Write-Host "Last Published Version $($semVarsSorted[0])" - $newVersion = [AzureEngSemanticVersion]::new($semVarsSorted[0]) + if ($latestTags -and ($latestTags.Length -gt 0)) { + foreach ($tag in $latestTags) { + $semVars += $tag.Substring($prefix.Length) + } + + $semVarsSorted = [AzureEngSemanticVersion]::SortVersionStrings($semVars) + Write-Host "Last Published Version $($semVarsSorted[0])" + $newVersion = [AzureEngSemanticVersion]::new($semVarsSorted[0]) + } + + $newVersion.PrereleaseLabel = $newVersion.DefaultPrereleaseLabel + $newVersion.PrereleaseNumber = $BuildID + $newVersion.IsPrerelease = $True + + Write-Host "Version to publish [ $($newVersion.ToString()) ]" + + if ($Language -ne "java") { + SetPackageVersion -PackageName $packageName ` + -Version $newVersion.ToString() ` + -ServiceDirectory $ServiceDirectory + } else { + SetPackageVersion -PackageName $packageName ` + -Version $newVersion.ToString() ` + -ServiceDirectory $ServiceDirectory ` + -GroupId $groupId + } + } + } + catch { + LogError "Failed to process ArtifactsJson: $ArtifactsJson, exception: $($_.Exception.Message)" + exit 1 } +} else { + # Fallback to original logic when using PackageNames string + foreach ($packageName in $packageNamesArray) { + Write-Host "Processing $packageName" + $newVersion = [AzureEngSemanticVersion]::new("1.0.0") + $prefix = "$packageName$TagSeparator" + Write-Host "Get Latest Tag : git tag -l $prefix*" + $latestTags = git tag -l "$prefix*" - $newVersion.PrereleaseLabel = $newVersion.DefaultPrereleaseLabel - $newVersion.PrereleaseNumber = $BuildID - $newVersion.IsPrerelease = $True + $semVars = @() - Write-Host "Version to publish [ $($newVersion.ToString()) ]" + if ($latestTags -and ($latestTags.Length -gt 0)) { + foreach ($tag in $latestTags) { + $semVars += $tag.Substring($prefix.Length) + } - SetPackageVersion -PackageName $packageName ` - -Version $newVersion.ToString() ` - -ServiceDirectory $ServiceDirectory + $semVarsSorted = [AzureEngSemanticVersion]::SortVersionStrings($semVars) + Write-Host "Last Published Version $($semVarsSorted[0])" + $newVersion = [AzureEngSemanticVersion]::new($semVarsSorted[0]) + } + + $newVersion.PrereleaseLabel = $newVersion.DefaultPrereleaseLabel + $newVersion.PrereleaseNumber = $BuildID + $newVersion.IsPrerelease = $True + + Write-Host "Version to publish [ $($newVersion.ToString()) ]" + + SetPackageVersion -PackageName $packageName ` + -Version $newVersion.ToString() ` + -ServiceDirectory $ServiceDirectory + } }