From fef060bec8f22cec3ebe76a37cdd4b2defa1cfb9 Mon Sep 17 00:00:00 2001 From: Maksim Shilov <89912354+shilovmaksim@users.noreply.github.com> Date: Wed, 10 Nov 2021 21:43:42 +0300 Subject: [PATCH] [Windows] Pin MongoDB to the specific version defined in the toolset (#4418) --- .../win/scripts/ImageHelpers/ChocoHelpers.ps1 | 32 +++++++++++++++++++ .../scripts/ImageHelpers/ImageHelpers.psm1 | 2 ++ .../scripts/Installers/Install-MongoDB.ps1 | 4 ++- images/win/scripts/Tests/Databases.Tests.ps1 | 3 +- images/win/toolsets/toolset-2016.json | 3 ++ images/win/toolsets/toolset-2019.json | 3 ++ images/win/toolsets/toolset-2022.json | 3 ++ 7 files changed, 48 insertions(+), 2 deletions(-) diff --git a/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 b/images/win/scripts/ImageHelpers/ChocoHelpers.ps1 index 16956654b..6089c3924 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 5eed22990..5beeef1ff 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 177300e97..8f4a97786 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 bf478c52a..6213d7f2e 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 72b6492a6..3ec118d62 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 ac2f170cb..0f30286b2 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 b5ef50eeb..bddcdec99 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" } }