mirror of
https://github.com/garrytan/gstack.git
synced 2026-09-14 18:41:42 +08:00
042daeee71
Pin every CI surface to Bun 1.4.0 to avoid extra-stdio finalizers closing reused live sockets. Add an isolated GC/listener regression that fails on Bun 1.3.13, and prevent coordinated rollback to an affected CI runtime. Check renderer cleanup against the render's own staging directory so concurrent renders cannot invalidate the assertion. Make the no-pgrep process-tree walk tolerate disappearing /proc entries, and synchronize its test fixture through child readiness and pipe EOF instead of sleeps. Validation: 9,157 passed, 31 skipped, zero failures across 556 files with retries disabled. Build, all-host generation freshness, and skill checks passed. All three races have failing-before/passing-after regressions.
114 lines
4.3 KiB
YAML
114 lines
4.3 KiB
YAML
name: Windows Setup E2E
|
|
|
|
# End-to-end fresh-install gate for Windows. Runs `./setup` on a clean
|
|
# windows-latest checkout and asserts the build completes, binaries
|
|
# resolve via find-browse, and the gstack-paths state root resolves
|
|
# cleanly. Catches Bun shell-parser regressions in package.json's build
|
|
# chain (#1538, #1537, #1530, #1457, #1561) before they reach users.
|
|
#
|
|
# Separate from windows-free-tests.yml because that one runs a curated
|
|
# unit-test subset; this one exercises the install path itself.
|
|
#
|
|
# Runner: GitHub-hosted free windows-latest. ~3-5 min total.
|
|
|
|
on:
|
|
pull_request:
|
|
branches: [main]
|
|
paths:
|
|
- 'package.json'
|
|
- 'scripts/build.sh'
|
|
- 'scripts/write-version-files.sh'
|
|
- 'setup'
|
|
- 'browse/src/cli.ts'
|
|
- 'browse/src/find-browse.ts'
|
|
- 'bin/gstack-paths'
|
|
- '.github/workflows/windows-setup-e2e.yml'
|
|
workflow_dispatch:
|
|
|
|
concurrency:
|
|
# PR-number keyed: head_ref carries no fork prefix, so same-name branches
|
|
# from two forks would share one group and cancel each other's runs.
|
|
group: windows-setup-e2e-${{ github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
# Install-path exercise only — no token writes.
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
windows-setup:
|
|
runs-on: windows-latest
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
|
|
- uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: 1.4.0
|
|
|
|
# Same lockfile-keyed install cache as windows-free-tests.yml (install
|
|
# was 45s of a 64s job, all network).
|
|
- uses: actions/cache@v6
|
|
with:
|
|
path: ~/.bun/install/cache
|
|
key: windows-bun-${{ hashFiles('bun.lock') }}
|
|
# A lockfile bump starts from the previous cache instead of cold
|
|
# (restore alone costs ~43s; without this a bump pays it for nothing).
|
|
restore-keys: |
|
|
windows-bun-
|
|
|
|
- name: Configure git identity
|
|
run: |
|
|
git config --global user.email "windows-setup-e2e@gstack.test"
|
|
git config --global user.name "Windows Setup E2E"
|
|
git config --global init.defaultBranch main
|
|
shell: bash
|
|
|
|
- name: Install dependencies
|
|
run: bun install --frozen-lockfile
|
|
shell: bash
|
|
|
|
- name: Run bun run build (the previously-broken path)
|
|
# This is the regression gate. Bun's Windows shell parser rejected
|
|
# multiple constructs the old inline build chain used; the wave
|
|
# moved the build to scripts/build.sh. If this step fails on
|
|
# Windows, the build chain regressed.
|
|
run: bun run build
|
|
shell: bash
|
|
env:
|
|
GSTACK_SKIP_PLAYWRIGHT: '1'
|
|
|
|
- name: Verify binaries exist (with .exe extension on Windows)
|
|
run: |
|
|
set -e
|
|
test -f browse/dist/browse.exe || test -f browse/dist/browse || (echo "MISSING: browse" && exit 1)
|
|
test -f browse/dist/find-browse.exe || test -f browse/dist/find-browse || (echo "MISSING: find-browse" && exit 1)
|
|
test -f design/dist/design.exe || test -f design/dist/design || (echo "MISSING: design" && exit 1)
|
|
test -f bin/gstack-global-discover.exe || test -f bin/gstack-global-discover || (echo "MISSING: gstack-global-discover" && exit 1)
|
|
echo "All binaries present"
|
|
shell: bash
|
|
|
|
- name: Verify find-browse resolves to the .exe variant
|
|
run: |
|
|
set -e
|
|
OUT=$(bun browse/src/find-browse.ts 2>&1) || true
|
|
echo "find-browse output: $OUT"
|
|
# On Windows, find-browse should successfully resolve to a binary,
|
|
# whether or not it has the .exe extension on disk. Empty output
|
|
# or "not found" means the .exe extension resolver regressed.
|
|
echo "$OUT" | grep -qE '(browse\.exe|browse)$' || (echo "find-browse failed to resolve binary on Windows" && exit 1)
|
|
shell: bash
|
|
|
|
- name: Verify gstack-paths state root resolves
|
|
run: |
|
|
set -e
|
|
eval "$(bash bin/gstack-paths)"
|
|
test -n "$GSTACK_STATE_ROOT" || (echo "GSTACK_STATE_ROOT empty" && exit 1)
|
|
test -n "$PLAN_ROOT" || (echo "PLAN_ROOT empty" && exit 1)
|
|
test -n "$TMP_ROOT" || (echo "TMP_ROOT empty" && exit 1)
|
|
echo "GSTACK_STATE_ROOT=$GSTACK_STATE_ROOT"
|
|
echo "PLAN_ROOT=$PLAN_ROOT"
|
|
echo "TMP_ROOT=$TMP_ROOT"
|
|
shell: bash
|