@@ -617,6 +617,7 @@ function Get-GitHubPackageDownloadUrl {
617617 [string ]$Version ,
618618 [string ]$UrlFilter ,
619619 [boolean ]$IsPrerelease = $false ,
620+ [boolean ]$LatestReleaseOnly = $true ,
620621 [int ]$SearchInCount = 100
621622 )
622623
@@ -626,20 +627,35 @@ function Get-GitHubPackageDownloadUrl {
626627
627628 $json = Invoke-RestMethod - Uri " https://api.github.com/repos/${RepoOwner} /${RepoName} /releases?per_page=${SearchInCount} "
628629 $tags = $json.Where { $_.prerelease -eq $IsPrerelease -and $_.assets }.tag_name
629- $versionToDownload = $tags |
630- Select-String - Pattern " \d+.\d+.\d+" |
631- ForEach-Object { $_.Matches.Value } |
632- Where-Object { $_ -like " $Version .*" -or $_ -eq $Version } |
633- Sort-Object { [version ]$_ } |
634- Select-Object - Last 1
635-
636- if (-not $versionToDownload ) {
637- Write-Host " Failed to get a tag name from ${RepoOwner} /${RepoName} releases"
638- exit 1
630+ $availableVersions = $tags |
631+ Select-String - Pattern " \d+.\d+.\d+" |
632+ ForEach-Object { $_.Matches.Value } |
633+ Where-Object { $_ -like " $Version .*" -or $_ -eq $Version } |
634+ Sort-Object - Descending { [version ]$_ }
635+
636+ if (-not $availableVersions ) {
637+ throw " Failed to get available versions from ${RepoOwner} /${RepoName} releases"
638+ }
639+
640+ if ($LatestReleaseOnly ) {
641+ $latestVersion = $availableVersions | Select-Object - First 1
642+ $urlFilterReplaced = $UrlFilter -replace " {BinaryName}" , $BinaryName -replace " {Version}" , $latestVersion
643+ $downloadUrl = $json.assets.browser_download_url -like $urlFilterReplaced
644+ } else {
645+ foreach ($version in $availableVersions ) {
646+ $urlFilterReplaced = $UrlFilter -replace " {BinaryName}" , $BinaryName -replace " {Version}" , $version
647+ $downloadUrl = $json.assets.browser_download_url -like $urlFilterReplaced
648+
649+ if ($downloadUrl ) {
650+ Write-Host " Found download url for ${RepoOwner} /${RepoName} ${BinaryName} ${version} "
651+ break
652+ }
653+ }
639654 }
640655
641- $UrlFilter = $UrlFilter -replace " {BinaryName}" , $BinaryName -replace " {Version}" , $versionToDownload
642- $downloadUrl = $json.assets.browser_download_url -like $UrlFilter
656+ if (-not $downloadUrl ) {
657+ throw " Failed to get download url for ${RepoOwner} /${RepoName} ${BinaryName} "
658+ }
643659
644660 return $downloadUrl
645661}
@@ -720,4 +736,4 @@ function Test-FileSignature {
720736 }
721737
722738 Write-Output " Signature for $FilePath is valid"
723- }
739+ }
0 commit comments