Retry interrupted client package downloads
This commit is contained in:
@@ -61,10 +61,52 @@ if ([Enum]::GetNames([Net.SecurityProtocolType]) -contains 'Tls13') {
|
||||
exit `$LASTEXITCODE
|
||||
"@
|
||||
|
||||
& powershell.exe -NoProfile -ExecutionPolicy Bypass -Command $command
|
||||
$exitCode = $LASTEXITCODE
|
||||
if ($exitCode -ne 0) {
|
||||
throw "OCSentinel updater exited with code $exitCode"
|
||||
for ($attempt = 1; $attempt -le 3; $attempt++) {
|
||||
& powershell.exe -NoProfile -ExecutionPolicy Bypass -Command $command | ForEach-Object { Write-Host $_ }
|
||||
$exitCode = $LASTEXITCODE
|
||||
if ($exitCode -eq 0) {
|
||||
return
|
||||
}
|
||||
|
||||
if ($attempt -lt 3) {
|
||||
Write-Warning "OCSentinel update attempt $attempt failed. Retrying."
|
||||
Start-Sleep -Seconds (5 * $attempt)
|
||||
}
|
||||
}
|
||||
|
||||
throw "OCSentinel updater exited with code $exitCode after 3 attempts."
|
||||
}
|
||||
|
||||
function Get-OCSentinelArtifact {
|
||||
param(
|
||||
[Parameter(Mandatory)][string]$Uri,
|
||||
[Parameter(Mandatory)][string]$DestinationPath
|
||||
)
|
||||
|
||||
$parameters = @{ Uri = $Uri; OutFile = $DestinationPath; TimeoutSec = 300 }
|
||||
if ((Get-Command Invoke-WebRequest).Parameters.ContainsKey("UseBasicParsing")) {
|
||||
$parameters.UseBasicParsing = $true
|
||||
}
|
||||
|
||||
for ($attempt = 1; $attempt -le 3; $attempt++) {
|
||||
try {
|
||||
Remove-Item -LiteralPath $DestinationPath -Force -ErrorAction SilentlyContinue
|
||||
Invoke-WebRequest @parameters
|
||||
|
||||
if (-not (Test-Path -LiteralPath $DestinationPath) -or (Get-Item -LiteralPath $DestinationPath).Length -eq 0) {
|
||||
throw "The downloaded artifact is empty."
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
catch {
|
||||
if ($attempt -eq 3) {
|
||||
throw "Could not download the OCSentinel package after 3 attempts. Last error: $($_.Exception.Message)"
|
||||
}
|
||||
|
||||
Write-Warning "Package download attempt $attempt failed. Retrying."
|
||||
Start-Sleep -Seconds (5 * $attempt)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -123,7 +165,7 @@ else {
|
||||
try {
|
||||
New-Item -ItemType Directory -Force -Path $extractRoot | Out-Null
|
||||
Write-Host "Downloading OCSentinel $($manifest.version)"
|
||||
Invoke-WebRequest -Uri ([string]$manifest.artifactUrl) -OutFile $zipPath -TimeoutSec 300
|
||||
Get-OCSentinelArtifact -Uri ([string]$manifest.artifactUrl) -DestinationPath $zipPath
|
||||
|
||||
$actualHash = (Get-FileHash -LiteralPath $zipPath -Algorithm SHA256).Hash.ToLowerInvariant()
|
||||
$expectedHash = ([string]$manifest.sha256).ToLowerInvariant()
|
||||
|
||||
Reference in New Issue
Block a user