fix(install): relax native stderr handling in install.ps1 (#48352)

This commit is contained in:
Tranquil-Flow 2026-06-18 12:06:29 +02:00
parent 426f321e84
commit 67316fdc94
2 changed files with 90 additions and 6 deletions

View file

@ -185,6 +185,18 @@ function Write-Err {
Write-Host "[X] $Message" -ForegroundColor Red
}
function Invoke-NativeWithRelaxedErrorAction {
param([scriptblock]$Script)
$prevEAP = $ErrorActionPreference
$ErrorActionPreference = "Continue"
try {
& $Script
} finally {
$ErrorActionPreference = $prevEAP
}
}
# Inspect npm output for a TLS-trust failure and, if found, print actionable
# remediation. npm/Node surface corporate MITM proxies and missing root CAs as
# "unable to get local issuer certificate" / "self-signed certificate in
@ -1306,7 +1318,7 @@ function Install-Repository {
Write-Info "Trying SSH clone..."
$env:GIT_SSH_COMMAND = "ssh -o BatchMode=yes -o ConnectTimeout=5"
try {
git -c windows.appendAtomically=false clone --depth 1 --branch $Branch $RepoUrlSsh $InstallDir
Invoke-NativeWithRelaxedErrorAction { git -c windows.appendAtomically=false clone --depth 1 --branch $Branch $RepoUrlSsh $InstallDir }
if ($LASTEXITCODE -eq 0) { $cloneSuccess = $true }
} catch { }
$env:GIT_SSH_COMMAND = $null
@ -1315,7 +1327,7 @@ function Install-Repository {
if (Test-Path $InstallDir) { Remove-Item -Recurse -Force $InstallDir -ErrorAction SilentlyContinue }
Write-Info "SSH failed, trying HTTPS..."
try {
git -c windows.appendAtomically=false clone --depth 1 --branch $Branch $RepoUrlHttps $InstallDir
Invoke-NativeWithRelaxedErrorAction { git -c windows.appendAtomically=false clone --depth 1 --branch $Branch $RepoUrlHttps $InstallDir }
if ($LASTEXITCODE -eq 0) { $cloneSuccess = $true }
} catch { }
}
@ -1443,8 +1455,11 @@ function Install-Venv {
Remove-Item -Recurse -Force "venv"
}
# uv creates the venv and pins the Python version in one step
& $UvCmd venv venv --python $PythonVersion
# uv creates the venv and pins the Python version in one step. uv emits
# normal progress such as "Using CPython ..." on stderr; under Windows
# PowerShell 5.1 with EAP=Stop that stderr is a NativeCommandError unless
# we temporarily relax EAP and trust $LASTEXITCODE for real failures.
Invoke-NativeWithRelaxedErrorAction { & $UvCmd venv venv --python $PythonVersion }
# Neutralize any inherited UV_PYTHON (e.g. $env:UV_PYTHON = "3.14" left in
# the user's shell). uv honours UV_PYTHON over an existing venv for the
@ -1514,7 +1529,7 @@ function Install-Dependencies {
# in the wrong directory and imports fail with ModuleNotFoundError.
# (Mirrors the same flag in scripts/install.sh::install_deps.)
$env:UV_PROJECT_ENVIRONMENT = "$InstallDir\venv"
& $UvCmd sync --extra all --locked
Invoke-NativeWithRelaxedErrorAction { & $UvCmd sync --extra all --locked }
if ($LASTEXITCODE -eq 0) {
Write-Success "Main package installed (hash-verified via uv.lock)"
$script:InstalledTier = "hash-verified (uv.lock)"
@ -1589,7 +1604,7 @@ except Exception:
if (-not $skipPipFallback) {
foreach ($tier in $installTiers) {
Write-Info "Trying tier: $($tier.Name) ..."
& $UvCmd pip install -e $tier.Spec
Invoke-NativeWithRelaxedErrorAction { & $UvCmd pip install -e $tier.Spec }
if ($LASTEXITCODE -eq 0) {
Write-Success "Main package installed ($($tier.Name))"
$script:InstalledTier = $tier.Name