Wiki sync: stop treating git's stderr as fatal
CI / build (pull_request) Has been cancelled

Mirror of github main + this script fix. PowerShell with
ErrorActionPreference=Stop was treating git's CRLF / 'remote: Processed N
references' stderr lines as script-fatal errors, aborting the sync
mid-flight. Switched to Continue + manual exit-code checks, drained stderr
on each git call, and disabled core.autocrlf in the throwaway clone.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-08 11:20:52 -04:00
parent b17d832842
commit b8d124a2b2
+20 -8
View File
@@ -44,7 +44,12 @@ param(
[string]$AuthorEmail = 'noreply@jpaul.me' [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 $repoRoot = Split-Path -Parent $PSScriptRoot
$docsDir = Join-Path $repoRoot 'docs' $docsDir = Join-Path $repoRoot 'docs'
$workDir = Join-Path $env:TEMP ("webhook-wiki-{0}" -f ([guid]::NewGuid().ToString('N').Substring(0, 8))) $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. # 1. Clone the wiki.
Write-Host "Cloning wiki to $workDir..." Write-Host "Cloning wiki to $workDir..."
git clone --quiet $WikiUrl $workDir & git clone --quiet $WikiUrl $workDir 2>&1 | Out-Null
if ($LASTEXITCODE -ne 0) { 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." 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 { try {
Push-Location $workDir Push-Location $workDir
@@ -128,16 +137,19 @@ try {
# 4. Sidebar # 4. Sidebar
Set-Content -LiteralPath (Join-Path $workDir '_Sidebar.md') -Value (New-Sidebar) -Encoding utf8 -NoNewline Set-Content -LiteralPath (Join-Path $workDir '_Sidebar.md') -Value (New-Sidebar) -Encoding utf8 -NoNewline
# 5. Commit + push if anything actually changed. # 5. Commit + push if anything actually changed. Drain stderr from each
git add -A # git invocation so PowerShell doesn't treat warnings as errors.
$changes = git status --porcelain & git add -A 2>&1 | Out-Null
$changes = & git status --porcelain 2>&1
if (-not $changes) { if (-not $changes) {
Write-Host "Wiki already up to date." Write-Host "Wiki already up to date."
return return
} }
$sha = git -C $repoRoot rev-parse --short HEAD $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" & git -c "user.name=$AuthorName" -c "user.email=$AuthorEmail" commit -q -m "Sync from docs/ at $sha" 2>&1 | Out-Null
git push --quiet 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." Write-Host "Pushed updated wiki."
} }
finally { Pop-Location } finally { Pop-Location }