1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
# Sets a valid version for a package using the buildID
param (
[Parameter(mandatory = $true)]
[string]$BuildID,
[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 = "_",
[Parameter(mandatory = $false)]
[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 "Artifacts count: $($Artifacts.Count)"
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) {
# 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
}
$artifactServiceDirectory = $null
# 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)) {
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
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*"
$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 $artifactServiceDirectory
} else {
SetPackageVersion -PackageName $packageName `
-Version $newVersion.ToString() `
-ServiceDirectory $artifactServiceDirectory `
-GroupId $groupId
}
}
}
catch {
LogError "Failed to process Artifacts: exception: $($_.Exception.Message)"
exit 1
}
} 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 = $PackageNames.Split(',')
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])
}
$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
}
} else {
LogError "Either PackageNames or Artifacts must be provided."
exit 1
}
|