Files
gstack/.github/workflows/windows-free-tests.yml
T
Garry Tan bfa579515c fix(windows-ci): enforce LF + build server-node.mjs in CI
Second round of windows-free-tests fixes after the first push. Curated subset
went from 386/34 to 58/4 fails. Remaining 4 fails + 1 error trace to two root
causes:

1. Line-ending sensitivity. Windows checkout with core.autocrlf=true converts
   .md/.tmpl files to CRLF. Tests that parse YAML frontmatter with
   `/^---\n([\\s\\S]+?)\n---/` then return zero matches — skill-collision-
   sentinel.test.ts:120 enumerated 0 skills on Windows, cascading into 3
   downstream test failures (sanity, KNOWN_COLLISIONS, /checkpoint resolved).

   Fix: add .gitattributes that pins LF for .md/.tmpl/.yml/.json/.toml/.sh/
   .ts/.tsx/.js/.mjs/.cjs/.bash. Root-cause fix; prevents future similar
   tests from hitting the same trap. Also keeps bash scripts LF on Linux
   runners (CRLF in shebangs produces "bad interpreter" errors).

2. Module-level Windows assertion in browse/src/cli.ts:82 throws if
   browse/dist/server-node.mjs is missing. Any test that transitively loads
   cli.ts (e.g., browse/test/tab-isolation.test.ts via shard mate imports)
   then fails to even start. server-node.mjs is generated by bash
   browse/scripts/build-node-server.sh, which `bun run build` calls but
   `bun install` does not.

   Fix: add a "Build server-node.mjs" step to .github/workflows/
   windows-free-tests.yml. Calls only the node-server build script, not
   full `bun run build` — we don't need the compiled binaries for tests
   and the full build is slow.

Expected: skill-collision-sentinel goes 0→3 pass (sanity, KNOWN_COLLISIONS,
/checkpoint resolved). tab-isolation's "unhandled error between tests"
disappears. Remaining tests should be green.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 23:53:18 -07:00

75 lines
2.8 KiB
YAML

name: Windows Free Tests
# Curated subset of the free test suite that runs on windows-latest.
#
# Codex's v1.18.0.0 review flagged that the existing evals.yml workflow uses
# a Linux container, so a windows-latest matrix entry there isn't a drop-in.
# This workflow is non-container, runs the curated Windows-safe subset, plus
# targeted resolver tests that exercise the Bun.which-based claude binary
# resolution + the GSTACK_CLAUDE_BIN override path on Windows.
#
# What this DOES NOT do (out of scope for v1.18.0.0):
# - Run the full free suite on Windows. The 24 tests that hardcode /bin/sh,
# spawn('sh',...), or raw /tmp/ paths are excluded by scripts/test-free-shards.ts
# --windows-only. They need POSIX-bound surfaces to be ported off shell
# primitives before they can run on Windows. Tracked as a follow-up TODO.
# - Run Playwright/browser-backed tests. Browse server bring-up on Windows is
# a separate concern (PR #1238 windows-pty-bun-pty-fix is in flight).
on:
pull_request:
branches: [main]
workflow_dispatch:
concurrency:
group: windows-free-${{ github.head_ref }}
cancel-in-progress: true
jobs:
windows-free-tests:
runs-on: windows-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Configure git identity (required by tests that init temp repos)
run: |
git config --global user.email "windows-ci@gstack.test"
git config --global user.name "Windows CI"
git config --global init.defaultBranch main
shell: bash
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Build server-node.mjs (required by Windows browse path)
# browse/src/cli.ts module-level throws on Windows if server-node.mjs
# is missing — Bun can't drive Playwright's Chromium on Windows
# (oven-sh/bun#4253). The bundle must exist for any test that
# transitively loads cli.ts to even import. We build only the
# Node-compatible server bundle here; full `bun run build` would
# also compile every binary which is slow and unnecessary for tests.
run: bash browse/scripts/build-node-server.sh
shell: bash
- name: Show curated subset (for build log audit trail)
run: bun run scripts/test-free-shards.ts --windows-only --list
shell: bash
- name: Run curated Windows-safe subset
run: bun run test:windows
shell: bash
- name: Targeted Claude resolver tests (real PATHEXT coverage on Windows)
run: bun test browse/test/claude-bin.test.ts
shell: bash
- name: gstack-paths helper test (resolves $GSTACK_STATE_ROOT etc. on Windows)
run: bun test test/gstack-paths.test.ts
shell: bash