From 606bed9ea8d4b60d08bb7bdc2b556c7cb8a6f121 Mon Sep 17 00:00:00 2001 From: Sebastien Morais Date: Fri, 1 Mar 2024 00:01:00 +0100 Subject: [PATCH] FIX: Extract zip win Related to https://github.com/actions/setup-python/issues/819 Changes include: - Fixing ExtractToDirectory call by removing third attribute. This function accepts a third argument but it should be of type 'System.Text.Encoding' not 'System.Boolean' - Reordering extract utils to first attemps ExtractToDirectory and then Expand-Archive. For some reason the download CPython release was not correctly handled by Expand-Archive. This could be happening if the zip file was compressed using an unsupported compression method (e.g. through `zip` with Unix/linux). --- dist/setup/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dist/setup/index.js b/dist/setup/index.js index dddc7eca0..76aa04a84 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -9861,7 +9861,7 @@ function extractZipWin(file, dest) { const pwshCommand = [ `$ErrorActionPreference = 'Stop' ;`, `try { Add-Type -AssemblyName System.IO.Compression.ZipFile } catch { } ;`, - `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }`, + `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}') }`, `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` ].join(' '); const args = [ @@ -9877,11 +9877,12 @@ function extractZipWin(file, dest) { yield exec_1.exec(`"${pwshPath}"`, args); } else { + //attempt to use pwsh with ExtractToDirectory, if this fails attempt Expand-Archive const powershellCommand = [ `$ErrorActionPreference = 'Stop' ;`, `try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ;`, - `if ((Get-Command -Name Expand-Archive -Module Microsoft.PowerShell.Archive -ErrorAction Ignore)) { Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force }`, - `else {[System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}', $true) }` + `try { [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}') }`, + `catch { if (($_.Exception.GetType().FullName -eq 'System.Management.Automation.MethodException') -or ($_.Exception.GetType().FullName -eq 'System.Management.Automation.RuntimeException') ){ Expand-Archive -LiteralPath '${escapedFile}' -DestinationPath '${escapedDest}' -Force } else { throw $_ } } ;` ].join(' '); const args = [ '-NoLogo',