File: SetTestPipelineVersion.ps1

package info (click to toggle)
python-azure 20260113%2Bgit-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 786,404 kB
  • sloc: python: 6,519,100; ansic: 804; javascript: 287; sh: 204; makefile: 198; xml: 109
file content (163 lines) | stat: -rw-r--r-- 5,674 bytes parent folder | download
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
}