From f67b639de6bd45a1b17f2d8c7a3fbd3405c7c6fa Mon Sep 17 00:00:00 2001 From: Justin Paul Date: Fri, 8 May 2026 11:19:10 -0400 Subject: [PATCH] Wiki sync: stop treating git's stderr warnings as fatal PowerShell with ErrorActionPreference=Stop escalates ANY native-command stderr output to a script-terminating error. git writes plenty of informational lines to stderr (CRLF nags, "remote: Processed N references", "Switched to branch X"), which made the sync script abort partway through every run when actually nothing was wrong. Three fixes: 1. Switch to ErrorActionPreference=Continue and check $LASTEXITCODE manually after each git call. 2. Drain stderr on each git invocation with `2>&1 | Out-Null`. 3. Disable core.autocrlf and core.safecrlf in the throwaway wiki clone so git stops complaining about line endings. Verified end-to-end against Gitea: 12 pages + sidebar pushed cleanly. Co-Authored-By: Claude Opus 4.7 (1M context) --- scripts/sync-wiki.ps1 | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/scripts/sync-wiki.ps1 b/scripts/sync-wiki.ps1 index 87b53ae..d62268b 100644 --- a/scripts/sync-wiki.ps1 +++ b/scripts/sync-wiki.ps1 @@ -44,7 +44,12 @@ param( [string]$AuthorEmail = 'noreply@jpaul.me' ) -$ErrorActionPreference = 'Stop' +# Continue (not Stop) because git writes informational messages to stderr +# (CRLF warnings, "remote: Processed N references" etc.) which PowerShell 5.1 +# escalates to a script-fatal error under Stop. We check $LASTEXITCODE +# manually after each git call instead. +$ErrorActionPreference = 'Continue' + $repoRoot = Split-Path -Parent $PSScriptRoot $docsDir = Join-Path $repoRoot 'docs' $workDir = Join-Path $env:TEMP ("webhook-wiki-{0}" -f ([guid]::NewGuid().ToString('N').Substring(0, 8))) @@ -98,10 +103,14 @@ function New-Sidebar() { # 1. Clone the wiki. Write-Host "Cloning wiki to $workDir..." -git clone --quiet $WikiUrl $workDir +& git clone --quiet $WikiUrl $workDir 2>&1 | Out-Null if ($LASTEXITCODE -ne 0) { throw "git clone failed. Has the wiki been initialized? Visit the repo's Wiki tab and create the first page via the UI before running this script." } +# Suppress git's CRLF nags for this throwaway clone so they don't become +# "errors" via PowerShell's native-command stderr handling. +& git -C $workDir config core.autocrlf false 2>&1 | Out-Null +& git -C $workDir config core.safecrlf false 2>&1 | Out-Null try { Push-Location $workDir @@ -128,16 +137,19 @@ try { # 4. Sidebar Set-Content -LiteralPath (Join-Path $workDir '_Sidebar.md') -Value (New-Sidebar) -Encoding utf8 -NoNewline - # 5. Commit + push if anything actually changed. - git add -A - $changes = git status --porcelain + # 5. Commit + push if anything actually changed. Drain stderr from each + # git invocation so PowerShell doesn't treat warnings as errors. + & git add -A 2>&1 | Out-Null + $changes = & git status --porcelain 2>&1 if (-not $changes) { Write-Host "Wiki already up to date." return } - $sha = git -C $repoRoot rev-parse --short HEAD - git -c "user.name=$AuthorName" -c "user.email=$AuthorEmail" commit -q -m "Sync from docs/ at $sha" - git push --quiet + $sha = & git -C $repoRoot rev-parse --short HEAD 2>&1 + & git -c "user.name=$AuthorName" -c "user.email=$AuthorEmail" commit -q -m "Sync from docs/ at $sha" 2>&1 | Out-Null + if ($LASTEXITCODE -ne 0) { throw "git commit failed (exit $LASTEXITCODE)" } + & git push --quiet 2>&1 | Out-Null + if ($LASTEXITCODE -ne 0) { throw "git push failed (exit $LASTEXITCODE)" } Write-Host "Pushed updated wiki." } finally { Pop-Location }