diff --git a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 index e5499625..ffedcff5 100644 --- a/images/win/scripts/ImageHelpers/InstallHelpers.ps1 +++ b/images/win/scripts/ImageHelpers/InstallHelpers.ps1 @@ -617,6 +617,7 @@ function Get-GitHubPackageDownloadUrl { [string]$Version, [string]$UrlFilter, [boolean]$IsPrerelease = $false, + [boolean]$LatestReleaseOnly = $true, [int]$SearchInCount = 100 ) @@ -626,20 +627,35 @@ function Get-GitHubPackageDownloadUrl { $json = Invoke-RestMethod -Uri "https://api.github.com/repos/${RepoOwner}/${RepoName}/releases?per_page=${SearchInCount}" $tags = $json.Where{ $_.prerelease -eq $IsPrerelease -and $_.assets }.tag_name - $versionToDownload = $tags | - Select-String -Pattern "\d+.\d+.\d+" | - ForEach-Object { $_.Matches.Value } | - Where-Object { $_ -like "$Version.*" -or $_ -eq $Version } | - Sort-Object { [version]$_ } | - Select-Object -Last 1 + $availableVersions = $tags | + Select-String -Pattern "\d+.\d+.\d+" | + ForEach-Object { $_.Matches.Value } | + Where-Object { $_ -like "$Version.*" -or $_ -eq $Version } | + Sort-Object -Descending { [version]$_ } - if (-not $versionToDownload) { - Write-Host "Failed to get a tag name from ${RepoOwner}/${RepoName} releases" - exit 1 + if (-not $availableVersions) { + throw "Failed to get available versions from ${RepoOwner}/${RepoName} releases" } - $UrlFilter = $UrlFilter -replace "{BinaryName}",$BinaryName -replace "{Version}",$versionToDownload - $downloadUrl = $json.assets.browser_download_url -like $UrlFilter + if ($LatestReleaseOnly) { + $latestVersion = $availableVersions | Select-Object -First 1 + $urlFilterReplaced = $UrlFilter -replace "{BinaryName}", $BinaryName -replace "{Version}", $latestVersion + $downloadUrl = $json.assets.browser_download_url -like $urlFilterReplaced + } else { + foreach ($version in $availableVersions) { + $urlFilterReplaced = $UrlFilter -replace "{BinaryName}", $BinaryName -replace "{Version}", $version + $downloadUrl = $json.assets.browser_download_url -like $urlFilterReplaced + + if ($downloadUrl) { + Write-Host "Found download url for ${RepoOwner}/${RepoName} ${BinaryName} ${version}" + break + } + } + } + + if (-not $downloadUrl) { + throw "Failed to get download url for ${RepoOwner}/${RepoName} ${BinaryName}" + } return $downloadUrl } @@ -720,4 +736,4 @@ function Test-FileSignature { } Write-Output "Signature for $FilePath is valid" -} \ No newline at end of file +} diff --git a/images/win/scripts/Installers/Install-IEWebDriver.ps1 b/images/win/scripts/Installers/Install-IEWebDriver.ps1 index afc53369..e7d34f63 100644 --- a/images/win/scripts/Installers/Install-IEWebDriver.ps1 +++ b/images/win/scripts/Installers/Install-IEWebDriver.ps1 @@ -1,18 +1,22 @@ ################################################################################ -## File: Install-SeleniumWebDrivers.ps1 -## Desc: Install Selenium Web Drivers +## File: Install-IEWebDriver.ps1 +## Desc: Install IE Web Driver ################################################################################ - -$json = Invoke-RestMethod -Uri "https://api.github.com/repos/SeleniumHQ/selenium/releases?per_page=100" -$ieDriverUrl = $json.Where{-not $_.prerelease}.assets.browser_download_url | Where-Object { $_ -like "*IEDriverServer_x64_*.zip" } | Select-Object -First 1 +$seleniumMajorVersion = (Get-ToolsetContent).selenium.version +$ieDriverUrl = Get-GitHubPackageDownloadUrl ` + -RepoOwner "SeleniumHQ" ` + -RepoName "selenium" ` + -BinaryName "IEDriverServer_x64" ` + -Version $seleniumMajorVersion ` + -UrlFilter "*{BinaryName}_{Version}.zip" ` + -LatestReleaseOnly $false # Download IE selenium driver try { Write-Host "Selenium IEDriverServer download and install..." $driverZipFile = Start-DownloadWithRetry -Url $ieDriverUrl -Name "SeleniumWebDrivers.zip" -} -catch { +} catch { Write-Error "[!] Failed to download $ieDriverUrl" exit 1 } @@ -31,4 +35,4 @@ Write-Host "Get the IEDriver version..." Write-Host "Setting the IEWebDriver environment variables" setx IEWebDriver $ieDriverPath /M -Invoke-PesterTests -TestFile "Browsers" -TestName "Internet Explorer" \ No newline at end of file +Invoke-PesterTests -TestFile "Browsers" -TestName "Internet Explorer" diff --git a/images/win/scripts/Installers/Install-Selenium.ps1 b/images/win/scripts/Installers/Install-Selenium.ps1 index 0214e16c..7a1043f6 100644 --- a/images/win/scripts/Installers/Install-Selenium.ps1 +++ b/images/win/scripts/Installers/Install-Selenium.ps1 @@ -11,8 +11,13 @@ New-Item -ItemType directory -Path $seleniumDirectory $seleniumMajorVersion = (Get-ToolsetContent).selenium.version $seleniumBinaryName = (Get-ToolsetContent).selenium.binary_name $seleniumFileName = "$seleniumBinaryName.jar" -$json = Invoke-RestMethod -Uri "https://api.github.com/repos/SeleniumHQ/selenium/releases?per_page=100" -$seleniumDownloadUrl = $json.Where{-not $_.prerelease}.assets.browser_download_url | Where-Object { $_ -like "*${seleniumBinaryName}-${seleniumMajorVersion}.*jar" } | Select-Object -First 1 + +$seleniumDownloadUrl = Get-GitHubPackageDownloadUrl ` + -RepoOwner "SeleniumHQ" ` + -RepoName "selenium" ` + -BinaryName "$seleniumBinaryName" ` + -Version $seleniumMajorVersion ` + -UrlFilter "*{BinaryName}-{Version}.jar" Start-DownloadWithRetry -Url $seleniumDownloadUrl -Name $seleniumFileName -DownloadPath $seleniumDirectory