diff --git a/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 b/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 index 16956654..6089c392 100644 --- a/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 +++ b/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 @@ -29,4 +29,36 @@ function Choco-Install { } } } +} + +function Send-RequestToCocolateyPackages { + param( + [Parameter(Mandatory)] + [string] $FilterQuery, + [string] $Url = "https://community.chocolatey.org/api", + [int] $ApiVersion = 2 + ) + + $response = Invoke-RestMethod "$Url/v$ApiVersion/Packages()?$filterQuery" + + return $response +} + +function Get-LatestChocoPackageVersion { + param( + [Parameter(Mandatory)] + [string] $PackageName, + [Parameter(Mandatory)] + [string] $TargetVersion + ) + + $versionNumbers = $TargetVersion.Split(".") + [int]$versionNumbers[-1] += 1 + $incrementedVersion = $versionNumbers -join "." + $filterQuery = "`$filter=(Id eq '$PackageName') and (IsPrerelease eq false) and (Version ge '$TargetVersion') and (Version lt '$incrementedVersion')" + $latestVersion = (Send-RequestToCocolateyPackages -FilterQuery $filterQuery).properties.Version | + Sort-Object {[version]$_} | + Select-Object -Last 1 + + return $latestVersion } \ No newline at end of file diff --git a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 index 5eed2299..5beeef1f 100644 --- a/images/win/scripts/ImageHelpers/ImageHelpers.psm1 +++ b/images/win/scripts/ImageHelpers/ImageHelpers.psm1 @@ -29,6 +29,8 @@ Export-ModuleMember -Function @( 'Test-IsWin19' 'Test-IsWin16' 'Choco-Install' + 'Send-RequestToCocolateyPackages' + 'Get-LatestChocoPackageVersion' 'Extract-7Zip' 'Get-CommandResult' 'Get-WhichTool' diff --git a/images/win/scripts/Installers/Install-MongoDB.ps1 b/images/win/scripts/Installers/Install-MongoDB.ps1 index 177300e9..8f4a9778 100644 --- a/images/win/scripts/Installers/Install-MongoDB.ps1 +++ b/images/win/scripts/Installers/Install-MongoDB.ps1 @@ -3,7 +3,9 @@ ## Desc: Install MongoDB #################################################################################### -Choco-Install -PackageName mongodb +$toolsetVersion = (Get-ToolsetContent).mongodb.version +$latestChocoPackage = Get-LatestChocoPackageVersion -TargetVersion $toolsetVersion -PackageName "mongodb" +Choco-Install -PackageName mongodb -ArgumentList "--version $latestChocoPackage" $mongoPath = (Get-CimInstance Win32_Service -Filter "Name LIKE 'mongodb'").PathName $mongoBin = Split-Path -Path $mongoPath.split('"')[1] Add-MachinePathItem "$mongoBin" diff --git a/images/win/scripts/Tests/Databases.Tests.ps1 b/images/win/scripts/Tests/Databases.Tests.ps1 index bf478c52..6213d7f2 100644 --- a/images/win/scripts/Tests/Databases.Tests.ps1 +++ b/images/win/scripts/Tests/Databases.Tests.ps1 @@ -3,7 +3,8 @@ Describe "MongoDB" { @{ ToolName = "mongo" } @{ ToolName = "mongod" } ) { - "$ToolName --version" | Should -ReturnZeroExitCode + $toolsetVersion = (Get-ToolsetContent).mongodb.version + (&$ToolName --version)[2].Split('"')[-2] | Should -BeLike "$toolsetVersion*" } } diff --git a/images/win/toolsets/toolset-2016.json b/images/win/toolsets/toolset-2016.json index 72b6492a..3ec118d6 100644 --- a/images/win/toolsets/toolset-2016.json +++ b/images/win/toolsets/toolset-2016.json @@ -422,5 +422,8 @@ }, "node": { "default": "14" + }, + "mongodb": { + "version": "5" } } diff --git a/images/win/toolsets/toolset-2019.json b/images/win/toolsets/toolset-2019.json index ac2f170c..0f30286b 100644 --- a/images/win/toolsets/toolset-2019.json +++ b/images/win/toolsets/toolset-2019.json @@ -454,5 +454,8 @@ }, "node": { "default": "14" + }, + "mongodb": { + "version": "5" } } diff --git a/images/win/toolsets/toolset-2022.json b/images/win/toolsets/toolset-2022.json index b5ef50ee..bddcdec9 100644 --- a/images/win/toolsets/toolset-2022.json +++ b/images/win/toolsets/toolset-2022.json @@ -304,5 +304,8 @@ }, "node": { "default": "14" + }, + "mongodb": { + "version": "5" } }