From 52abce91910b049d92db35a2ac163799be5d747c Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Wed, 30 Sep 2026 15:32:28 +0200 Subject: [PATCH] Interop workflow: every command in a step counts The Windows runner's default pwsh does not stop when a native command fails, so a multi-command step reported only its last command: a failing cultnet-py suite went green inside "Verify Python RUDP reliability". The job now defaults to Git Bash, which the runner starts with -e -o pipefail. The pwsh consolidation guard checks git ls-files' exit code instead of treating a failed listing as clean. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/cultnet-interop.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/cultnet-interop.yml b/.github/workflows/cultnet-interop.yml index 680d474e..9072e0cb 100644 --- a/.github/workflows/cultnet-interop.yml +++ b/.github/workflows/cultnet-interop.yml @@ -12,6 +12,13 @@ jobs: name: C# / TypeScript / Rust / Python / Kotlin runs-on: windows-latest timeout-minutes: 60 + # Windows runners default to pwsh, which does not stop when a native command fails: a + # multi-command step reported only its last command, and a failing cultnet-py suite + # went green that way. Git Bash runs as `bash -e -o pipefail`, so every command counts. + # Steps that name `shell: pwsh` check $LASTEXITCODE themselves. + defaults: + run: + shell: bash env: DOTNET: dotnet @@ -71,7 +78,9 @@ jobs: $ErrorActionPreference = "Stop" # packages/cultnet-rs/contracts/cultnet/ holds R-AB's vendored byte copies (the crate must build # when copied alone). Their drift guard is packages/cultnet-rs/tests/schema_discovery_contracts.rs:74-99. - $stray = git ls-files '*.schema.json' | Where-Object { $_ -notmatch '^(packages/cultnet-rs/)?contracts/cultnet/' } + $tracked = git ls-files '*.schema.json' + if ($LASTEXITCODE -ne 0) { throw "git ls-files failed" } + $stray = $tracked | Where-Object { $_ -notmatch '^(packages/cultnet-rs/)?contracts/cultnet/' } # -I skips binary files: unity/org.gamecult.cultlib/Runtime/Plugins/GameCult.Networking.dll # still embeds the retired namespace until it is rebuilt (REC-032 D4, deferred). $oldNamespace = git grep -I -lE 'GameCult/cultnet-ts/(integration/)?contracts' -- ':!.voidbot'