From 372483abf0d8efc18f8b92e3881b4cb974f70066 Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Tue, 16 Jun 2026 08:10:30 +0000 Subject: [PATCH] =?UTF-8?q?ci(windows):=20use=20shell:=20pwsh=20(PowerShel?= =?UTF-8?q?l=207)=20=E2=80=94=20fixes=20GITHUB=5FENV=20BOM=20corruption?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Windows PowerShell 5.1's Out-File -Encoding utf8 prepends a UTF-8 BOM, corrupting the first GITHUB_ENV line so CARGO_WORKSPACE_DIR silently never got set -> windows-reactor build.rs panic -> CI build failed (runs 8765/8768). pwsh 7 writes UTF-8 without a BOM. Installed PowerShell 7.6.2 MSI on the runner and put C:\Program Files\PowerShell\7 on the daemon wrapper PATH so jobs find pwsh; switched all windows.yml steps to shell: pwsh. (Reproduced locally with CARGO_WORKSPACE_DIR set: the build is green in 2m37s — the BOM was the only issue.) Co-Authored-By: Claude Opus 4.8 --- .gitea/workflows/windows.yml | 18 +++++++++++------- scripts/ci/setup-windows-runner.ps1 | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/.gitea/workflows/windows.yml b/.gitea/workflows/windows.yml index c9babdc..627fa00 100644 --- a/.gitea/workflows/windows.yml +++ b/.gitea/workflows/windows.yml @@ -5,8 +5,12 @@ # The MSVC/WinUI/FFmpeg toolchain (cargo/rustup on ASCII paths, NASM, CMake, LLVM, FFmpeg, # CARGO_HOME, CMAKE_POLICY_VERSION_MINIMUM, …) is baked into the runner's daemon env. The one # per-checkout var is CARGO_WORKSPACE_DIR (windows-reactor's build.rs unwraps it + stages the -# Windows App SDK NuGets/winmd under it) — set from GITHUB_WORKSPACE in a step (not job-level -# env, where Gitea can't yet resolve the workspace path). +# Windows App SDK NuGets/winmd under it) — set from GITHUB_WORKSPACE in a step. +# +# Steps use `shell: pwsh` (PowerShell 7) deliberately: Windows PowerShell 5.1's +# `Out-File -Encoding utf8` prepends a UTF-8 BOM that corrupts the first GITHUB_ENV line (the +# CARGO_WORKSPACE_DIR var silently never gets set -> reactor build.rs panics). pwsh writes no BOM. +# The runner's daemon wrapper puts C:\Program Files\PowerShell\7 on PATH so the job finds pwsh. name: windows on: @@ -35,7 +39,7 @@ jobs: - uses: actions/checkout@v4 - name: Configure + toolchain versions - shell: powershell + shell: pwsh run: | "CARGO_WORKSPACE_DIR=$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 rustc --version @@ -44,17 +48,17 @@ jobs: Write-Output "workspace: $env:GITHUB_WORKSPACE" - name: Build - shell: powershell + shell: pwsh run: cargo build -p punktfunk-client-windows - name: Clippy (-D warnings) - shell: powershell + shell: pwsh run: cargo clippy -p punktfunk-client-windows --all-targets -- -D warnings - name: Rustfmt check - shell: powershell + shell: pwsh run: cargo fmt -p punktfunk-client-windows -- --check - name: Test - shell: powershell + shell: pwsh run: cargo test -p punktfunk-client-windows diff --git a/scripts/ci/setup-windows-runner.ps1 b/scripts/ci/setup-windows-runner.ps1 index 0a1d599..f8aceec 100644 --- a/scripts/ci/setup-windows-runner.ps1 +++ b/scripts/ci/setup-windows-runner.ps1 @@ -93,7 +93,7 @@ $env:RUSTUP_HOME = "C:\Users\Public\.rustup" $env:CMAKE_POLICY_VERSION_MINIMUM = "3.5" $env:LIBCLANG_PATH = "C:\Program Files\LLVM\bin" $env:FFMPEG_DIR = "C:\Users\Public\ffmpeg" -$env:PATH = "C:\Users\Public\.cargo\bin;C:\nvm4w\nodejs;C:\Program Files\NASM;C:\Program Files\CMake\bin;C:\Program Files\LLVM\bin;C:\Users\Public\ffmpeg\bin;" + $env:PATH +$env:PATH = "C:\Program Files\PowerShell\7;C:\Users\Public\.cargo\bin;C:\nvm4w\nodejs;C:\Program Files\NASM;C:\Program Files\CMake\bin;C:\Program Files\LLVM\bin;C:\Users\Public\ffmpeg\bin;" + $env:PATH Set-Location "C:\Users\Public\act-runner" # cmd-level redirect (>>, 2>&1) keeps the daemon's native stderr out of PowerShell's error stream. & cmd /c "act_runner.exe daemon --config config.yaml >> runner.log 2>&1"