Sync eng/common directory with azure-sdk-tools for PR 12410 (#6772)

* Added 'ArtifactsJson' parameter

* Made script work for non-java

* Reduced duplicated parsing

* Fixed type error

---------

Co-authored-by: ray chen <raychen@microsoft.com>
This commit is contained in:
Azure SDK Bot 2025-10-13 09:06:58 -07:00 committed by GitHub
parent 44b5a65419
commit e9cc8a7a37
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 126 additions and 36 deletions

View File

@ -1,12 +1,25 @@
parameters: parameters:
PackageName: '' - name: PackageName
PackageNames: '' type: string
ServiceDirectory: '' default: ''
TagSeparator: '_' - name: PackageNames
TestPipeline: false 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: steps:
- ${{ if eq(parameters.TestPipeline, 'true') }}: - ${{ if eq(parameters.TestPipeline, true) }}:
- task: PowerShell@2 - task: PowerShell@2
displayName: Prep template pipeline for release displayName: Prep template pipeline for release
condition: and(succeeded(), ne(variables['Skip.SetTestPipelineVersion'], 'true')) condition: and(succeeded(), ne(variables['Skip.SetTestPipelineVersion'], 'true'))
@ -18,4 +31,5 @@ steps:
-PackageNames '${{ coalesce(parameters.PackageName, parameters.PackageNames) }}' -PackageNames '${{ coalesce(parameters.PackageName, parameters.PackageNames) }}'
-ServiceDirectory '${{ parameters.ServiceDirectory }}' -ServiceDirectory '${{ parameters.ServiceDirectory }}'
-TagSeparator '${{ parameters.TagSeparator }}' -TagSeparator '${{ parameters.TagSeparator }}'
-ArtifactsJson '${{ parameters.ArtifactsJson }}'
pwsh: true pwsh: true

View File

@ -3,12 +3,14 @@
param ( param (
[Parameter(mandatory = $true)] [Parameter(mandatory = $true)]
[string]$BuildID, [string]$BuildID,
[Parameter(mandatory = $true)] [Parameter(mandatory = $false)]
[string]$PackageNames, [string]$PackageNames = "",
[Parameter(mandatory = $true)] [Parameter(mandatory = $true)]
[string]$ServiceDirectory, [string]$ServiceDirectory,
[Parameter(mandatory = $false)] [Parameter(mandatory = $false)]
[string]$TagSeparator = "_" [string]$TagSeparator = "_",
[Parameter(mandatory = $false)]
[string]$ArtifactsJson = ""
) )
. (Join-Path $PSScriptRoot common.ps1) . (Join-Path $PSScriptRoot common.ps1)
@ -16,43 +18,117 @@ param (
Write-Host "PackageNames: $PackageNames" Write-Host "PackageNames: $PackageNames"
Write-Host "ServiceDirectory: $ServiceDirectory" Write-Host "ServiceDirectory: $ServiceDirectory"
Write-Host "BuildID: $BuildID" Write-Host "BuildID: $BuildID"
Write-Host "ArtifactsJson: $ArtifactsJson"
$packageNamesArray = @() $packageNamesArray = @()
$artifacts = $null
if ([String]::IsNullOrWhiteSpace($PackageNames)) { # If ArtifactsJson is provided, extract package names from it
LogError "PackageNames cannot be empty." if (![String]::IsNullOrWhiteSpace($ArtifactsJson)) {
exit 1 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(',') $packageNamesArray = $PackageNames.Split(',')
} }
else {
LogError "Either PackageNames or ArtifactsJson must be provided."
exit 1
}
foreach ($packageName in $packageNamesArray) { if ($artifacts) {
Write-Host "Processing $packageName" # When using ArtifactsJson, process each artifact with its name and groupId (if applicable)
$newVersion = [AzureEngSemanticVersion]::new("1.0.0") try {
$prefix = "$packageName$TagSeparator" foreach ($artifact in $artifacts) {
Write-Host "Get Latest Tag : git tag -l $prefix*" $packageName = $artifact.name
$latestTags = git tag -l "$prefix*" $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)) { Write-Host "Get Latest Tag : git tag -l $prefix*"
foreach ($tag in $latestTags) { $latestTags = git tag -l "$prefix*"
$semVars += $tag.Substring($prefix.Length)
$semVars = @()
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*"
$semVars = @()
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])
} }
$semVarsSorted = [AzureEngSemanticVersion]::SortVersionStrings($semVars) $newVersion.PrereleaseLabel = $newVersion.DefaultPrereleaseLabel
Write-Host "Last Published Version $($semVarsSorted[0])" $newVersion.PrereleaseNumber = $BuildID
$newVersion = [AzureEngSemanticVersion]::new($semVarsSorted[0]) $newVersion.IsPrerelease = $True
Write-Host "Version to publish [ $($newVersion.ToString()) ]"
SetPackageVersion -PackageName $packageName `
-Version $newVersion.ToString() `
-ServiceDirectory $ServiceDirectory
} }
$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
} }