fix: preserve Windows command paths containing spaces

This commit is contained in:
Zoltan Kochan
2026-11-03 14:55:12 +01:00
parent 73e46992e0
commit e68a094b1a
3 changed files with 163 additions and 131 deletions
+36
View File
@@ -419,3 +419,39 @@ jobs:
exit 1
fi
shell: bash
windows_dest_spaces:
name: 'Windows destination with spaces (${{ matrix.version }} / standalone=${{ matrix.standalone }})'
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
include:
- version: '10.33.0'
standalone: false
- version: '11.25.0'
standalone: true
- version: '12.3.4'
standalone: false
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- id: pnpm
uses: ./
with:
version: ${{ matrix.version }}
standalone: ${{ matrix.standalone }}
dest: '${{ runner.temp }}/pnpm setup & tools'
- name: Verify PowerShell and bin_dest use the requested version
shell: pwsh
env:
EXPECTED_VERSION: ${{ matrix.version }}
BIN_DEST: ${{ steps.pnpm.outputs.bin_dest }}
run: |
$actual = pnpm --version
if ($LASTEXITCODE -ne 0 -or $actual -ne $env:EXPECTED_VERSION) {
throw "Expected $env:EXPECTED_VERSION on PATH, got $actual"
}
$actual = & (Join-Path $env:BIN_DEST 'pnpm') --version
if ($LASTEXITCODE -ne 0 -or $actual -ne $env:EXPECTED_VERSION) {
throw "Expected $env:EXPECTED_VERSION via bin_dest, got $actual"
}
+121 -121
View File
File diff suppressed because one or more lines are too long
+5 -9
View File
@@ -1,4 +1,5 @@
import { addPath, exportVariable } from '@actions/core'
import { exec } from '@actions/exec'
import { spawn } from 'child_process'
import { rm, writeFile, mkdir, symlink } from 'fs/promises'
import { readFileSync, existsSync } from 'fs'
@@ -209,7 +210,7 @@ function targetsPnpm12(version: string): boolean {
function getSystemNodeVersion(): Promise<{ major: number; minor: number }> {
return new Promise((resolve) => {
const cp = spawn('node', ['--version'], { stdio: ['pipe', 'pipe', 'pipe'], shell: process.platform === 'win32' })
const cp = spawn('node', ['--version'], { stdio: ['pipe', 'pipe', 'pipe'] })
let output = ''
cp.stdout.on('data', (data: Buffer) => { output += data.toString() })
cp.on('close', () => {
@@ -221,15 +222,10 @@ function getSystemNodeVersion(): Promise<{ major: number; minor: number }> {
}
function runCommand(cmd: string, args: string[], opts: { cwd: string; env?: Record<string, string | undefined> }): Promise<number> {
return new Promise<number>((resolve, reject) => {
const cp = spawn(cmd, args, {
return exec(`"${cmd}"`, args, {
cwd: opts.cwd,
env: opts.env,
stdio: ['pipe', 'inherit', 'inherit'],
shell: process.platform === 'win32',
})
cp.on('error', reject)
cp.on('close', resolve)
env: opts.env && Object.fromEntries(Object.entries(opts.env).filter((entry): entry is [string, string] => entry[1] !== undefined)),
ignoreReturnCode: true,
})
}