Wiki sync: stop treating git's stderr as fatal (#5)
Sync Wiki / sync (push) Has been cancelled
CI / build (push) Has been cancelled

This commit was merged in pull request #5.
This commit is contained in:
2026-05-08 11:21:07 -04:00
parent b17d832842
commit a2bd338839
+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 }