mirror of
https://github.com/actions/runner-images.git
synced 2025-12-12 20:26:49 +00:00
175 lines
4.8 KiB
PowerShell
175 lines
4.8 KiB
PowerShell
function Build-MarkdownElement
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Build markdown element for cached tool.
|
|
|
|
.DESCRIPTION
|
|
Build markdown element that contains name of tool, set of versions and additional notes.
|
|
|
|
.PARAMETER Head
|
|
Header of cached tool markdown element
|
|
|
|
.PARAMETER Content
|
|
Array of lines that contains required information about installed tool instances.
|
|
#>
|
|
|
|
param
|
|
(
|
|
[String] $Head,
|
|
[Object[]] $Content
|
|
)
|
|
|
|
$markdown = New-MDHeader $Head -Level 4
|
|
$markdown += New-MDParagraph -Lines $Content -NoNewLine
|
|
|
|
return $markdown
|
|
}
|
|
|
|
function Get-CachedToolInstances
|
|
{
|
|
<#
|
|
.SYNOPSIS
|
|
Returns hastable of installed cached tools.
|
|
|
|
.DESCRIPTION
|
|
Return hastable that contains versions and architectures for selected cached tool.
|
|
|
|
.PARAMETER Name
|
|
Name of cached tool.
|
|
|
|
.PARAMETER VersionCommand
|
|
Optional parameter. Command to return version of system default tool.
|
|
|
|
.EXAMPLE
|
|
Get-CachedToolInstances -Name "Python" -VersionCommand "--version"
|
|
|
|
#>
|
|
|
|
param
|
|
(
|
|
[String] $Name,
|
|
[String] $VersionCommand
|
|
)
|
|
|
|
$toolInstances = @()
|
|
$toolPath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath $Name
|
|
|
|
# Get all installed versions from TOOLSDIRECTORY folder
|
|
$versions = Get-ChildItem $toolPath | Sort-Object { [System.Version]$_.Name }
|
|
foreach ($version in $versions)
|
|
{
|
|
$instanceInfo = @{}
|
|
|
|
# Create instance hashtable
|
|
[string]$instanceInfo.Path = Join-Path -Path $toolPath -ChildPath $version.Name
|
|
[string]$instanceInfo.Version = $version.Name
|
|
|
|
# Get all architectures for current version
|
|
[array]$instanceInfo.Architecture_Array = Get-ChildItem $version.FullName -Name -Directory | Where-Object { $_ -match "^x[0-9]{2}$" }
|
|
[string]$instanceInfo.Architecture = $instanceInfo.Architecture_Array -Join ", "
|
|
|
|
# Add (default) postfix to version name, in case if current version is in environment path
|
|
if (-not ([string]::IsNullOrEmpty($VersionCommand)))
|
|
{
|
|
$defaultVersion = $(& ($Name.ToLower()) $VersionCommand 2>&1)
|
|
$defaultToolVersion = $defaultVersion | Select-String -Pattern "\d+\.\d+\.\d+" -AllMatches `
|
|
| ForEach-Object { $_.Matches.Value }
|
|
|
|
if ([version]$version.Name -eq [version]$defaultToolVersion)
|
|
{
|
|
$instanceInfo.Version += " (Default)"
|
|
}
|
|
}
|
|
|
|
$toolInstances += $instanceInfo
|
|
}
|
|
|
|
return $toolInstances
|
|
}
|
|
|
|
function New-MDNewLine {
|
|
param (
|
|
[int] $Count = 1
|
|
)
|
|
$newLineSymbol = [System.Environment]::NewLine
|
|
return $newLineSymbol * $Count
|
|
}
|
|
|
|
function Get-LinkTarget {
|
|
param (
|
|
[string] $inputPath
|
|
)
|
|
$link = Get-Item $inputPath | Select-Object -ExpandProperty Target
|
|
if ($link) {
|
|
return " -> $link"
|
|
}
|
|
return ""
|
|
}
|
|
|
|
function Get-PathWithLink {
|
|
param (
|
|
[string] $inputPath
|
|
)
|
|
$link = Get-LinkTarget($inputPath)
|
|
return "${inputPath}${link}"
|
|
}
|
|
|
|
function Test-BlankElement {
|
|
param(
|
|
[string] $Markdown
|
|
)
|
|
|
|
$splitByLines = $Markdown.Split("`n")
|
|
# Validate entry without version
|
|
$blankVersions = $splitByLines -match "^-" -notmatch "(OS|Image) Version|WSL|Vcpkg|\d\." | Out-String
|
|
|
|
# Validate tables with blank rows
|
|
$blankRows = ""
|
|
for($i = 0; $i -lt $splitByLines.Length; $i++) {
|
|
$addRows= $false
|
|
$table = @()
|
|
if ($splitByLines[$i].StartsWith("#") -and $splitByLines[$i+1].StartsWith("|")) {
|
|
$table += $splitByLines[$i,($i+1),($i+2)]
|
|
$i += 3
|
|
$current = $splitByLines[$i]
|
|
while ($current.StartsWith("|")) {
|
|
$isBlankRow = $current.Substring(1, $current.LastIndexOf("|") - 2).Split("|").Trim() -contains ""
|
|
if ($isBlankRow) {
|
|
$table += $current
|
|
$addRows = $true
|
|
}
|
|
$current = $splitByLines[++$i]
|
|
}
|
|
if ($addRows) {
|
|
$blankRows += $table | Out-String
|
|
}
|
|
}
|
|
}
|
|
|
|
# Display report
|
|
$isReport = $false
|
|
if ($blankVersions) {
|
|
Write-Host "Software list with blank version:`n${blankVersions}"
|
|
$isReport = $true
|
|
}
|
|
if ($blankRows) {
|
|
Write-Host "Tables with blank rows:`n${blankRows}"
|
|
$isReport = $true
|
|
}
|
|
if ($isReport) {
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
function Take-Part {
|
|
param (
|
|
[Parameter(ValueFromPipeline)]
|
|
[string] $toolOutput,
|
|
[string] $Delimiter = " ",
|
|
[int[]] $Part
|
|
)
|
|
$parts = $toolOutput.Split($Delimiter, [System.StringSplitOptions]::RemoveEmptyEntries)
|
|
$selectedParts = $parts[$Part]
|
|
return [string]::Join($Delimiter, $selectedParts)
|
|
} |