ci: parallelize GitHub releases and fix WSL path resolution
This commit is contained in:
6 files changed
+288
-59
No files matched your search
@@ -0,0 +1,97 @@
|
||||
#!/usr/bin/env pwsh
|
||||
# Run with pwsh -NoProfile -File scripts/tests/wsl_paths.ps1.
|
||||
$ErrorActionPreference = 'Stop'
|
||||
. "$PSScriptRoot/../lib.ps1"
|
||||
|
||||
# Intercept WSL so these tests never start or register a real runner.
|
||||
$global:WakeyWslTest = @{
|
||||
Calls = [System.Collections.Generic.List[object]]::new()
|
||||
ExitCode = 0
|
||||
# Fake conversion response, chosen to exercise a path containing spaces.
|
||||
Output = '/mnt/c/runner home/config.yaml'
|
||||
}
|
||||
function global:wsl.exe {
|
||||
$global:WakeyWslTest.Calls.Add(@($args))
|
||||
$global:LASTEXITCODE = $global:WakeyWslTest.ExitCode
|
||||
if ($args[3] -eq 'wslpath') { $global:WakeyWslTest.Output }
|
||||
}
|
||||
|
||||
foreach ($path in @('/home/lda/repo/scripts/helper.sh', '/mnt/c/runner home/config.yaml')) {
|
||||
$result = ConvertTo-WslPath -WindowsPath $path -Distro TestDistro
|
||||
if ($result -cne $path) { throw "POSIX path changed: $result" }
|
||||
}
|
||||
if ($global:WakeyWslTest.Calls.Count -ne 0) { throw 'POSIX paths invoked wslpath' }
|
||||
|
||||
foreach ($path in @('C:\runner home\config.yaml', 'C:/runner home/config.yaml', '\\server\share\runner home\config.yaml')) {
|
||||
$global:WakeyWslTest.Calls.Clear()
|
||||
$result = ConvertTo-WslPath -WindowsPath $path -Distro TestDistro
|
||||
if ($result -cne '/mnt/c/runner home/config.yaml') { throw 'Mock Windows conversion failed' }
|
||||
$call = $global:WakeyWslTest.Calls[0]
|
||||
if (($call[0..4] -join ' ') -cne '-d TestDistro -e wslpath -a' -or $call[5] -cne $path) {
|
||||
throw 'Distro or Windows path was not passed intact'
|
||||
}
|
||||
}
|
||||
if ((ConvertTo-WslPath 'D:\runner\config.yaml') -cne '/mnt/d/runner/config.yaml') {
|
||||
throw 'Existing drive conversion changed'
|
||||
}
|
||||
foreach ($path in @('root@router:/root/.bin/', 'relative/file')) {
|
||||
if ((ConvertTo-WslPath $path) -cne $path) { throw 'Existing SCP path handling changed' }
|
||||
}
|
||||
|
||||
# Resolve missing relative paths from the PS location, including dot segments.
|
||||
$temp = Join-Path ([System.IO.Path]::GetTempPath()) "wakey-wsl-paths-$([guid]::NewGuid())"
|
||||
New-Item -ItemType Directory -Path $temp | Out-Null
|
||||
Push-Location $temp
|
||||
try {
|
||||
foreach ($relative in @('new folder/config.yaml', '.\new folder\config.yaml', 'nested/../new folder/config.yaml')) {
|
||||
$expected = Join-Path $temp 'new folder/config.yaml'
|
||||
$global:WakeyWslTest.Calls.Clear()
|
||||
$result = ConvertTo-WslPath -Path $relative -Distro TestDistro
|
||||
if ($IsWindows) {
|
||||
if ($global:WakeyWslTest.Calls[0][5] -cne $expected) { throw 'Relative Windows path was not resolved before conversion' }
|
||||
} elseif ($result -cne $expected -or $global:WakeyWslTest.Calls.Count -ne 0) {
|
||||
throw "Relative POSIX path was not resolved: $result"
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
Pop-Location
|
||||
Remove-Item -Recurse -Force $temp
|
||||
}
|
||||
|
||||
foreach ($case in @(
|
||||
@{ ExitCode = 1; Output = '' },
|
||||
@{ ExitCode = 1; Output = '/mnt/c/bad' },
|
||||
@{ ExitCode = 0; Output = '' }
|
||||
)) {
|
||||
$global:WakeyWslTest.ExitCode = $case.ExitCode
|
||||
$global:WakeyWslTest.Output = $case.Output
|
||||
$caught = $false
|
||||
try { ConvertTo-WslPath -WindowsPath 'C:\bad' -Distro TestDistro | Out-Null }
|
||||
catch { $caught = $_.Exception.Message -like 'wslpath *' }
|
||||
if (-not $caught) { throw 'Failed/empty wslpath result was accepted' }
|
||||
}
|
||||
|
||||
if (-not $IsWindows) {
|
||||
$global:WakeyWslTest.Calls.Clear()
|
||||
$global:WakeyWslTest.ExitCode = 0
|
||||
& "$PSScriptRoot/../act_runner_wsl.ps1" -Action status -Distro TestDistro
|
||||
if ($global:WakeyWslTest.Calls.Count -ne 1 -or $global:WakeyWslTest.Calls[0][3] -ne 'bash') {
|
||||
throw 'POSIX wrapper paths should invoke only the runner command'
|
||||
}
|
||||
$command = $global:WakeyWslTest.Calls[0][5]
|
||||
if ($command -notlike '*act_runner_fedora.sh*' -or $command -notlike '*ar_data/wsl_runner/config.yaml*') {
|
||||
throw 'Wrapper did not resolve default paths'
|
||||
}
|
||||
$global:WakeyWslTest.Calls.Clear()
|
||||
$global:WakeyWslTest.Output = '/mnt/c/runner home/config.yaml'
|
||||
& "$PSScriptRoot/../act_runner_wsl.ps1" -Action status -Distro TestDistro `
|
||||
-RunnerHome 'new runner home' -RunnerBin 'bin/act_runner' -ConfigPath 'C:\runner home\config.yaml'
|
||||
if ($global:WakeyWslTest.Calls.Count -ne 2 -or $global:WakeyWslTest.Calls[0][3] -ne 'wslpath') {
|
||||
throw 'Explicit Windows config should be converted once before running bash'
|
||||
}
|
||||
$command = $global:WakeyWslTest.Calls[1][5]
|
||||
foreach ($path in @((Join-Path (Get-Location).Path 'new runner home'), (Join-Path (Get-Location).Path 'bin/act_runner'), '/mnt/c/runner home/config.yaml')) {
|
||||
if (-not $command.Contains((Quote-ShArg $path))) { throw "Explicit path missing from runner command: $path" }
|
||||
}
|
||||
}
|
||||
Write-Host 'WSL path tests passed'
|
||||
Reference in new issue
Block a user