mirror of
https://github.com/actions/versions-package-tools.git
synced 2026-01-06 19:07:20 +08:00
Merge pull request #3 from actions/v-mazhuk/improve-builds-runner
Improve builds runner
This commit is contained in:
@@ -3,14 +3,20 @@ class AzureDevOpsApi
|
|||||||
[string] $BaseUrl
|
[string] $BaseUrl
|
||||||
[string] $RepoOwner
|
[string] $RepoOwner
|
||||||
[object] $AuthHeader
|
[object] $AuthHeader
|
||||||
|
[UInt32] $RetryCount
|
||||||
|
[UInt32] $RetryIntervalSec
|
||||||
|
|
||||||
AzureDevOpsApi(
|
AzureDevOpsApi(
|
||||||
[string] $TeamFoundationCollectionUri,
|
[string] $TeamFoundationCollectionUri,
|
||||||
[string] $ProjectName,
|
[string] $ProjectName,
|
||||||
[string] $AccessToken
|
[string] $AccessToken,
|
||||||
|
[UInt32] $RetryCount,
|
||||||
|
[UInt32] $RetryIntervalSec
|
||||||
) {
|
) {
|
||||||
$this.BaseUrl = $this.BuildBaseUrl($TeamFoundationCollectionUri, $ProjectName)
|
$this.BaseUrl = $this.BuildBaseUrl($TeamFoundationCollectionUri, $ProjectName)
|
||||||
$this.AuthHeader = $this.BuildAuth($AccessToken)
|
$this.AuthHeader = $this.BuildAuth($AccessToken)
|
||||||
|
$this.RetryCount = $RetryCount
|
||||||
|
$this.RetryIntervalSec = $RetryIntervalSec
|
||||||
}
|
}
|
||||||
|
|
||||||
[object] hidden BuildAuth([string]$AccessToken) {
|
[object] hidden BuildAuth([string]$AccessToken) {
|
||||||
@@ -73,17 +79,21 @@ class AzureDevOpsApi
|
|||||||
$params.Body = $Body
|
$params.Body = $Body
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$params.RetryIntervalSec = $this.RetryIntervalSec
|
||||||
|
$params.MaximumRetryCount = $this.RetryCount
|
||||||
|
|
||||||
return Invoke-RestMethod @params
|
return Invoke-RestMethod @params
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function Get-AzureDevOpsApi {
|
function Get-AzureDevOpsApi {
|
||||||
param (
|
param (
|
||||||
[string] $TeamFoundationCollectionUri,
|
[string] $TeamFoundationCollectionUri,
|
||||||
[string] $ProjectName,
|
[string] $ProjectName,
|
||||||
[string] $AccessToken
|
[string] $AccessToken,
|
||||||
|
[UInt32] $RetryCount = 3,
|
||||||
|
[UInt32] $RetryIntervalSec = 60
|
||||||
)
|
)
|
||||||
|
|
||||||
return [AzureDevOpsApi]::New($TeamFoundationCollectionUri, $ProjectName, $AccessToken)
|
return [AzureDevOpsApi]::New($TeamFoundationCollectionUri, $ProjectName, $AccessToken, $RetryCount, $RetryIntervalSec)
|
||||||
}
|
}
|
||||||
@@ -3,26 +3,51 @@ param (
|
|||||||
[Parameter(Mandatory)] [string] $AzureDevOpsProjectName,
|
[Parameter(Mandatory)] [string] $AzureDevOpsProjectName,
|
||||||
[Parameter(Mandatory)] [string] $AzureDevOpsAccessToken,
|
[Parameter(Mandatory)] [string] $AzureDevOpsAccessToken,
|
||||||
[Parameter(Mandatory)] [string] $SourceBranch,
|
[Parameter(Mandatory)] [string] $SourceBranch,
|
||||||
[Parameter(Mandatory)] [string] $ToolVersions,
|
|
||||||
[Parameter(Mandatory)] [UInt32] $DefinitionId,
|
[Parameter(Mandatory)] [UInt32] $DefinitionId,
|
||||||
[string] $SourceVersion
|
[Parameter(Mandatory)] [string] $SourceVersion,
|
||||||
|
[Parameter(Mandatory)] [string] $ManifestLink,
|
||||||
|
[Parameter(Mandatory)] [bool] $WaitForBuilds,
|
||||||
|
[string] $ToolVersions,
|
||||||
|
[UInt32] $RetryIntervalSec = 60,
|
||||||
|
[UInt32] $RetryCount = 3
|
||||||
)
|
)
|
||||||
|
|
||||||
Import-Module (Join-Path $PSScriptRoot "azure-devops-api.ps1")
|
Import-Module (Join-Path $PSScriptRoot "azure-devops-api.ps1")
|
||||||
Import-Module (Join-Path $PSScriptRoot "build-info.ps1")
|
Import-Module (Join-Path $PSScriptRoot "build-info.ps1")
|
||||||
|
|
||||||
|
function Get-ToolVersions {
|
||||||
|
param (
|
||||||
|
[Parameter(Mandatory)] [string] $ManifestLink,
|
||||||
|
[Parameter(Mandatory)] [UInt32] $RetryIntervalSec,
|
||||||
|
[Parameter(Mandatory)] [UInt32] $Retries,
|
||||||
|
[string] $ToolVersions
|
||||||
|
)
|
||||||
|
|
||||||
|
[string[]] $versionsList = @()
|
||||||
|
if ($ToolVersions) {
|
||||||
|
$versionsList = $ToolVersions.Split(',')
|
||||||
|
} else {
|
||||||
|
Write-Host "Get the list of releases from $ManifestLink"
|
||||||
|
$releases = Invoke-RestMethod $ManifestLink -MaximumRetryCount $Retries -RetryIntervalSec $RetryIntervalSec
|
||||||
|
$versionsList = $releases.version
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Versions to build: $versionsList"
|
||||||
|
return $versionsList
|
||||||
|
}
|
||||||
|
|
||||||
function Queue-Builds {
|
function Queue-Builds {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)] [AzureDevOpsApi] $AzureDevOpsApi,
|
[Parameter(Mandatory)] [AzureDevOpsApi] $AzureDevOpsApi,
|
||||||
[Parameter(Mandatory)] [string] $ToolVersions,
|
[Parameter(Mandatory)] [string[]] $ToolVersions,
|
||||||
[Parameter(Mandatory)] [string] $SourceBranch,
|
[Parameter(Mandatory)] [string] $SourceBranch,
|
||||||
[Parameter(Mandatory)] [string] $SourceVersion,
|
[Parameter(Mandatory)] [string] $SourceVersion,
|
||||||
[Parameter(Mandatory)] [string] $DefinitionId
|
[Parameter(Mandatory)] [UInt32] $DefinitionId
|
||||||
)
|
)
|
||||||
|
|
||||||
[BuildInfo[]]$queuedBuilds = @()
|
[BuildInfo[]]$queuedBuilds = @()
|
||||||
|
|
||||||
$ToolVersions.Split(',') | ForEach-Object {
|
$ToolVersions | ForEach-Object {
|
||||||
$version = $_.Trim()
|
$version = $_.Trim()
|
||||||
Write-Host "Queue build for $version..."
|
Write-Host "Queue build for $version..."
|
||||||
$queuedBuild = $AzureDevOpsApi.QueueBuild($version, $SourceBranch, $SourceVersion, $DefinitionId)
|
$queuedBuild = $AzureDevOpsApi.QueueBuild($version, $SourceBranch, $SourceVersion, $DefinitionId)
|
||||||
@@ -36,11 +61,10 @@ function Queue-Builds {
|
|||||||
|
|
||||||
function Wait-Builds {
|
function Wait-Builds {
|
||||||
param (
|
param (
|
||||||
[Parameter(Mandatory)] [BuildInfo[]] $Builds
|
[Parameter(Mandatory)] [BuildInfo[]] $Builds,
|
||||||
|
[Parameter(Mandatory)] [UInt32] $RetryIntervalSec
|
||||||
)
|
)
|
||||||
|
|
||||||
$timeoutBetweenRefreshSec = 30
|
|
||||||
|
|
||||||
do {
|
do {
|
||||||
# If build is still running - refresh its status
|
# If build is still running - refresh its status
|
||||||
foreach($build in $builds) {
|
foreach($build in $builds) {
|
||||||
@@ -55,7 +79,7 @@ function Wait-Builds {
|
|||||||
|
|
||||||
$runningBuildsCount = ($builds | Where-Object { !$_.IsFinished() }).Length
|
$runningBuildsCount = ($builds | Where-Object { !$_.IsFinished() }).Length
|
||||||
|
|
||||||
Start-Sleep -Seconds $timeoutBetweenRefreshSec
|
Start-Sleep -Seconds $RetryIntervalSec
|
||||||
} while($runningBuildsCount -gt 0)
|
} while($runningBuildsCount -gt 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,7 +88,7 @@ function Make-BuildsOutput {
|
|||||||
[Parameter(Mandatory)] [BuildInfo[]] $Builds
|
[Parameter(Mandatory)] [BuildInfo[]] $Builds
|
||||||
)
|
)
|
||||||
|
|
||||||
Write-Host "Builds info:"
|
Write-Host "`nBuilds info:"
|
||||||
$builds | Format-Table -AutoSize -Property Name,Id,Status,Result,Link | Out-String -Width 10000
|
$builds | Format-Table -AutoSize -Property Name,Id,Status,Result,Link | Out-String -Width 10000
|
||||||
|
|
||||||
# Return exit code based on status of builds
|
# Return exit code based on status of builds
|
||||||
@@ -74,21 +98,30 @@ function Make-BuildsOutput {
|
|||||||
$failedBuilds | ForEach-Object -Process { Write-Host "##vso[task.logissue type=error;]Name: $($_.Name); Link: $($_.Link)" }
|
$failedBuilds | ForEach-Object -Process { Write-Host "##vso[task.logissue type=error;]Name: $($_.Name); Link: $($_.Link)" }
|
||||||
Write-Host "##vso[task.complete result=Failed]"
|
Write-Host "##vso[task.complete result=Failed]"
|
||||||
} else {
|
} else {
|
||||||
Write-host "##[section] All builds have been passed successfully"
|
Write-host "##[section]All builds have been passed successfully"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$azureDevOpsApi = Get-AzureDevOpsApi -TeamFoundationCollectionUri $TeamFoundationCollectionUri `
|
$azureDevOpsApi = Get-AzureDevOpsApi -TeamFoundationCollectionUri $TeamFoundationCollectionUri `
|
||||||
-ProjectName $AzureDevOpsProjectName `
|
-ProjectName $AzureDevOpsProjectName `
|
||||||
-AccessToken $AzureDevOpsAccessToken
|
-AccessToken $AzureDevOpsAccessToken `
|
||||||
|
-RetryCount $RetryCount `
|
||||||
|
-RetryIntervalSec $RetryIntervalSec
|
||||||
|
|
||||||
|
$toolVersionsList = Get-ToolVersions -ManifestLink $ManifestLink `
|
||||||
|
-RetryIntervalSec $RetryIntervalSec `
|
||||||
|
-Retries $RetryCount `
|
||||||
|
-ToolVersions $ToolVersions
|
||||||
|
|
||||||
$queuedBuilds = Queue-Builds -AzureDevOpsApi $azureDevOpsApi `
|
$queuedBuilds = Queue-Builds -AzureDevOpsApi $azureDevOpsApi `
|
||||||
-ToolVersions $ToolVersions `
|
-ToolVersions $toolVersionsList `
|
||||||
-SourceBranch $SourceBranch `
|
-SourceBranch $SourceBranch `
|
||||||
-SourceVersion $SourceVersion `
|
-SourceVersion $SourceVersion `
|
||||||
-DefinitionId $DefinitionId
|
-DefinitionId $DefinitionId
|
||||||
|
|
||||||
Write-Host "Waiting results of builds ..."
|
if ($WaitForBuilds) {
|
||||||
Wait-Builds -Builds $queuedBuilds
|
Write-Host "`nWaiting results of builds ..."
|
||||||
|
Wait-Builds -Builds $queuedBuilds -RetryIntervalSec $RetryIntervalSec
|
||||||
|
|
||||||
Make-BuildsOutput -Builds $queuedBuilds
|
Make-BuildsOutput -Builds $queuedBuilds
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user