diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 index b6545dec3..531530f4b 100644 --- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 +++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 @@ -38,6 +38,7 @@ Export-ModuleMember -Function @( 'Choco-Install' 'Send-RequestToCocolateyPackages' 'Get-LatestChocoPackageVersion' + 'Get-GitHubPackageDownloadUrl' 'Extract-7Zip' 'Get-CommandResult' 'Get-WhichTool' diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 index f113071d9..4522bcf7f 100644 --- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 +++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 @@ -559,3 +559,30 @@ function Invoke-SBWithRetry { } } } + +function Get-GitHubPackageDownloadUrl { + param ( + [string]$RepoOwner, + [string]$RepoName, + [string]$BinaryName, + [string]$Version, + [string]$UrlFilter, + [boolean]$IsPrerelease = $false, + [int]$SearchInCount = 100 + ) + + if ($Version -eq "latest") { + $Version = "*" + } + $json = Invoke-RestMethod -Uri "https://api.github.com/repos/${RepoOwner}/${RepoName}/releases?per_page=${SearchInCount}" + $versionToDownload = ($json.Where{ $_.prerelease -eq $IsPrerelease }.tag_name | + Select-String -Pattern "\d+.\d+.\d+").Matches.Value | + Where-Object {$_ -Like "${Version}.*" -or $_ -eq ${Version}} | + Sort-Object {[version]$_} | + Select-Object -Last 1 + + $UrlFilter = $UrlFilter -replace "{BinaryName}",$BinaryName -replace "{Version}",$versionToDownload + $downloadUrl = $json.assets.browser_download_url -like $UrlFilter + + return $downloadUrl +} diff --git a/images/win/scripts/Installers/Install-Kotlin.ps1 b/images/win/scripts/Installers/Install-Kotlin.ps1 index 95be7f777..09009433c 100644 --- a/images/win/scripts/Installers/Install-Kotlin.ps1 +++ b/images/win/scripts/Installers/Install-Kotlin.ps1 @@ -4,9 +4,11 @@ ################################################################################ # Install Kotlin -$url = "https://api.github.com/repos/JetBrains/kotlin/releases/latest" -[System.String] $kotlinLatest = (Invoke-RestMethod -Uri $url).assets.browser_download_url -match "kotlin-compiler" -$kotlinInstallerPath = Start-DownloadWithRetry -Url $kotlinLatest -Name "kotlin-compiler.zip" +$kotlinVersion = (Get-ToolsetContent).kotlin.version +$kotlinBinaryName = (Get-ToolsetContent).kotlin.binary_name + +$kotlinDownloadUrl = Get-GitHubPackageDownloadUrl -RepoOwner "JetBrains" -RepoName "kotlin" -BinaryName $kotlinBinaryName -Version $kotlinVersion -UrlFilter "*{BinaryName}-{Version}.zip" +$kotlinInstallerPath = Start-DownloadWithRetry -Url $kotlinDownloadUrl -Name "$kotlinBinaryName.zip" Write-Host "Expand Kotlin archive" $kotlinPath = "C:\tools" diff --git a/images/win/toolsets/toolset-2016.json b/images/win/toolsets/toolset-2016.json index d0ee7ef83..28981b3d8 100644 --- a/images/win/toolsets/toolset-2016.json +++ b/images/win/toolsets/toolset-2016.json @@ -435,5 +435,9 @@ }, "postgresql": { "version": "14" + }, + "kotlin": { + "version": "latest", + "binary_name": "kotlin-compiler" } } diff --git a/images/win/toolsets/toolset-2019.json b/images/win/toolsets/toolset-2019.json index 99bbf7951..51fc9bc13 100644 --- a/images/win/toolsets/toolset-2019.json +++ b/images/win/toolsets/toolset-2019.json @@ -467,5 +467,9 @@ }, "postgresql": { "version": "14" + }, + "kotlin": { + "version": "latest", + "binary_name": "kotlin-compiler" } } diff --git a/images/win/toolsets/toolset-2022.json b/images/win/toolsets/toolset-2022.json index fa75aaf42..5c7d803e0 100644 --- a/images/win/toolsets/toolset-2022.json +++ b/images/win/toolsets/toolset-2022.json @@ -318,5 +318,9 @@ }, "postgresql": { "version": "14" + }, + "kotlin": { + "version": "latest", + "binary_name": "kotlin-compiler" } }