|
|
|
@ -50,6 +50,7 @@ function Build-VersionsManifest {
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
$Releases = $Releases | Sort-Object -Property "published_at" -Descending
|
|
|
|
|
$ltsRules = Get-LtsRules -Configuration $Configuration
|
|
|
|
|
|
|
|
|
|
$versionsHash = @{}
|
|
|
|
|
foreach ($release in $Releases) {
|
|
|
|
@ -64,17 +65,52 @@ function Build-VersionsManifest {
|
|
|
|
|
continue
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$ltsStatus = Get-VersionLtsStatus -Version $versionKey -LtsRules $ltsRules
|
|
|
|
|
$stable = $version.PreReleaseLabel ? $false : $true
|
|
|
|
|
[array]$releaseAssets = $release.assets | ForEach-Object { New-AssetItem -ReleaseAsset $_ -Configuration $Configuration }
|
|
|
|
|
|
|
|
|
|
$versionsHash.Add($versionKey, [PSCustomObject]@{
|
|
|
|
|
version = $versionKey
|
|
|
|
|
stable = $stable
|
|
|
|
|
release_url = $release.html_url
|
|
|
|
|
files = $releaseAssets
|
|
|
|
|
})
|
|
|
|
|
$versionHash = [PSCustomObject]@{}
|
|
|
|
|
$versionHash | Add-Member -Name "version" -Value $versionKey -MemberType NoteProperty
|
|
|
|
|
$versionHash | Add-Member -Name "stable" -Value $stable -MemberType NoteProperty
|
|
|
|
|
if ($ltsStatus) { $versionHash | Add-Member -Name "lts" -Value $ltsStatus -MemberType NoteProperty }
|
|
|
|
|
$versionHash | Add-Member -Name "release_url" -Value $release.html_url -MemberType NoteProperty
|
|
|
|
|
$versionHash | Add-Member -Name "files" -Value $releaseAssets -MemberType NoteProperty
|
|
|
|
|
$versionsHash.Add($versionKey, $versionHash)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Sort versions by descending
|
|
|
|
|
return $versionsHash.Values | Sort-Object -Property @{ Expression = { [Semver]$_.version }; Descending = $true }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Get-LtsRules {
|
|
|
|
|
param (
|
|
|
|
|
[Parameter(Mandatory)][object]$Configuration
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
$ruleExpression = $Configuration."lts_rule_expression"
|
|
|
|
|
if ($ruleExpression) {
|
|
|
|
|
Invoke-Expression $ruleExpression
|
|
|
|
|
} else {
|
|
|
|
|
@()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function Get-VersionLtsStatus {
|
|
|
|
|
param (
|
|
|
|
|
[Parameter(Mandatory)][string]$Version,
|
|
|
|
|
[array]$LtsRules
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
foreach ($ltsRule in $LtsRules) {
|
|
|
|
|
if (($Version -eq $ltsRule.Name) -or ($Version.StartsWith("$($ltsRule.Name)."))) {
|
|
|
|
|
return $ltsRule.Value
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $null
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Invoke-RestMethod "https://raw.githubusercontent.com/nodejs/Release/main/schedule.json"
|
|
|
|
|
# $arr.PSObject.Properties | Where-Object { $_.Value.codename } | ForEach-Object { @( @{ $_.Name = $_.Value.codename }) }
|
|
|
|
|
# (Invoke-RestMethod 'https://raw.githubusercontent.com/nodejs/Release/main/schedule.json').PSObject.Properties | Where-Object { $_.Value.codename } | ForEach-Object { @{ Name = $_.Name.TrimStart('v'); Value = $_.Value.codename } }
|