dotnet-installer/build/buildpipeline/security/Get-LatestVersion.ps1

72 lines
2.5 KiB
PowerShell
Raw Normal View History

<#
.SYNOPSIS
Retrieves the latest commit SHA and the corresponding package Id for the specified branch of CLI.
This retrieval is achieved by downloading the latest.version file, which contains the commit SHA and package Id info.
If retrieval succeeds, then the commit is set as a VSTS Task Variable named CliLatestCommitSha, and similarly package Id is set as CliLatestPackageId.
.PARAMETER $Branch
Name of the CLI branch.
.PARAMETER $Filename
Name of the file that contains latest version info i.e. commit SHA and package Id.
If not specified, then the default value is latest.version
.PARAMETER $UrlPrefix
URL prefix for $Filename.
If not specified, then the default value is https://dotnetcli.blob.core.windows.net/dotnet/Sdk
#>
param(
[Parameter(Mandatory=$true)]
[string]$Branch,
[string]$Filename="latest.version",
[string]$UrlPrefix="https://dotnetcli.blob.core.windows.net/dotnet/Sdk"
)
function Get-VersionInfo
{
Write-Host "Attempting to retrieve latest version info from $latestVersionUrl"
$retries = 3
$retryCount = 1
$oldEap = $ErrorActionPreference
while ($retryCount -le $retries)
{
$ErrorActionPreference = "Stop"
try
{
$content = (Invoke-WebRequest -Uri "$latestVersionUrl" -UseBasicParsing).Content
return $content.Split([Environment]::NewLine, [System.StringSplitOptions]::RemoveEmptyEntries)
}
catch
{
Sleep -Seconds (Get-Random -minimum 3 -maximum 10)
Write-Host "Exception occurred while attempting to get latest version info from $latestVersionUrl. $_"
Write-Host "Retry $retryCount of $retries"
}
finally
{
$ErrorActionPreference = $oldEap
}
$retryCount++
}
}
$latestVersionUrl = "$UrlPrefix/$Branch/$Filename"
$latestVersionContent = Get-VersionInfo
if ($latestVersionContent -ne $null -and $latestVersionContent.Length -eq 2)
{
$CliLatestCommitSha = $latestVersionContent[0]
$CliLatestPackageId = $latestVersionContent[1]
Write-Host "##vso[task.setvariable variable=CliLatestCommitSha;]$CliLatestCommitSha"
Write-Host "##vso[task.setvariable variable=CliLatestPackageId;]$CliLatestPackageId"
Write-Host "The latest commit SHA in CLI $Branch is $CliLatestCommitSha"
Write-Host "The latest package Id in CLI $Branch is $CliLatestPackageId"
}
else
{
Write-Error "Unable to get latest version info from $latestVersionUrl"
}