mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-01 14:34:42 +01:00
v1.91.166.0 test: warm PowerShell 5.1 outside the setup-ps1 legacy cases; xvfb round trip on a private display range (GSTA-57) (#3324)
* test: warm PowerShell 5.1 outside setup-ps1 legacy cases; xvfb round trip uses a private display range (GSTA-57) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * v1.91.166.0 test: warm PowerShell 5.1 outside the setup-ps1 legacy cases; xvfb round trip on a private display range (GSTA-57) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
43d6ed28f2
commit
a3ed43c9b3
6 files changed
+25
-11
No files matched your search
@@ -1,5 +1,13 @@
|
||||
# Changelog
|
||||
|
||||
## [1.91.166.0] - 2026-10-20
|
||||
|
||||
**Two load-sensitive free tests from the flaky ledger now measure what they test.** Daily flaky-fix pass, 2026-10-20, free and load-sensitive group.
|
||||
|
||||
### Fixed
|
||||
- **`test/setup-ps1.test.ts` PowerShell 5.1 cases (windows-setup, 2026-10-17 and 2026-10-20).** The workflow runs the file with plain `bun test`, so each case has Bun's 5 s default. The first `powershell.exe` launch on a runner pays a cold start that later launches do not. Over 94 windows-setup jobs, the first legacy launch (the space-in-TMPDIR case) took p50 1.46 s, p95 3.42 s and max 5.04 s, while the second launch (the empty-argument case) had p95 1.41 s. Both reds were that first launch killed at 5 s with exit null. A `beforeAll` now launches the legacy interpreter once on the stub checkout, with a 60 s hook budget matching the spawns' own bound. No per-test timeout changed. On Linux, a pwsh wrapper that adds 6 s to the first launch reproduces the CI symptom on main and passes with the warm-up. One that adds 6 s to every launch still fails three cases (negative control).
|
||||
- **`browse/test/xvfb.test.ts` spawn → cleanup round trip (Ubicloud full run, 2026-10-18).** It picked a display from `:99-:110` and then spawned on it, inside the default range that headed daemons in parallel shards allocate from. Six default-range allocators reproduced "X display :N was reserved by another X server during startup" in 9 of 20 and 5 of 20 runs. The case now uses `:25000-:25100`, a range no other allocator uses, like the file's other private-range cases. It now fails instead of silently returning when no display is free. 30 of 30 runs pass under the same load.
|
||||
|
||||
## [1.91.165.0] - 2026-10-20
|
||||
|
||||
**The Version Gate accepts an unstamped READY head under merge trains.** Under the train policy a lane's head keeps VERSION, package.json and the agents digest at main's version and writes its CHANGELOG entry under `[Unreleased]`. The gate still demanded a bump, so every unstamped PR showed "VERSION not bumped", and `gstack-ship-queue ready` refused it with `QUEUE_NOT_READY` (#3320, #3321). That blocked every train. Plan GSTA-49, S1 for the queue.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# gstack digest v1.91.165.0 — regenerate/re-copy after upgrading gstack
|
||||
# gstack digest v1.91.166.0 — regenerate/re-copy after upgrading gstack
|
||||
|
||||
Behavioral rules from gstack (https://github.com/garrytan/gstack), compressed
|
||||
for agent hosts without a full skill install. The full skills add workflows,
|
||||
|
||||
@@ -157,12 +157,11 @@ describe('pickFreeDisplay (Xvfb installed)', () => {
|
||||
describe('xvfb spawn → cleanup round trip (Linux + Xvfb only)', () => {
|
||||
test.skipIf(!HAS_XVFB)('spawn, validate ownership, cleanup', async () => {
|
||||
const { spawnXvfb } = await import('../src/xvfb');
|
||||
const display = pickFreeDisplay(99, 110);
|
||||
if (display == null) {
|
||||
// No free display in range — skip.
|
||||
return;
|
||||
}
|
||||
const handle = await spawnXvfb(display);
|
||||
// A range no other allocator in the suite uses: headed daemons in parallel
|
||||
// shards take displays from the default :99-:120 between this pick and the spawn.
|
||||
const display = pickFreeDisplay(25000, 25100);
|
||||
expect(display).not.toBeNull();
|
||||
const handle = await spawnXvfb(display!);
|
||||
try {
|
||||
expect(handle.pid).toBeGreaterThan(0);
|
||||
expect(handle.display).toBe(`:${display}`);
|
||||
@@ -173,7 +172,7 @@ describe('xvfb spawn → cleanup round trip (Linux + Xvfb only)', () => {
|
||||
const lock = fs.readFileSync(lockPath, 'utf8');
|
||||
cleanupXvfb({ ...handle, startTime: 'stale-start-time' });
|
||||
expect(isOurXvfb(handle.pid, handle.startTime)).toBe(true);
|
||||
await expect(spawnXvfb(display)).rejects.toThrow('already reserved');
|
||||
await expect(spawnXvfb(display!)).rejects.toThrow('already reserved');
|
||||
expect(fs.readFileSync(lockPath, 'utf8')).toBe(lock);
|
||||
expect(isOurXvfb(handle.pid, handle.startTime)).toBe(true);
|
||||
} finally {
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "gstack",
|
||||
"version": "1.91.165",
|
||||
"version": "1.91.166",
|
||||
"description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.",
|
||||
"license": "MIT",
|
||||
"type": "module",
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
* (#3130: the 5.1 legacy mode stripped the double quotes inside the bash -c
|
||||
* script, and bash failed with "unexpected EOF").
|
||||
*/
|
||||
import { describe, test, expect, afterEach } from 'bun:test';
|
||||
import { describe, test, expect, afterEach, beforeAll } from 'bun:test';
|
||||
import * as fs from 'fs';
|
||||
import * as os from 'os';
|
||||
import * as path from 'path';
|
||||
@@ -65,6 +65,13 @@ function runPs1(dir: string, args: string[], env: Record<string, string | undefi
|
||||
}
|
||||
|
||||
describe('setup.ps1', () => {
|
||||
// The first Windows PowerShell 5.1 launch on a runner pays a cold start (up to
|
||||
// 5 s on windows-latest) that later launches do not; pay it here, outside the
|
||||
// per-test timeout of the legacy cases below.
|
||||
beforeAll(() => {
|
||||
if ((PWSH || IS_WIN) && BASH) runPs1Legacy(stubCheckout(), ['--host', 'codex']);
|
||||
}, 60_000);
|
||||
|
||||
test('passes arguments NUL-separated through a private file to a constant bash script', () => {
|
||||
expect(SOURCE).toContain(`& $bash -c 'set -f; IFS=; mapfile -d '''' -t argv < $1; rm -f -- $1; exec ./setup \${argv[@]}' setup $argFile`);
|
||||
const script = SOURCE.match(/& \$bash -c '((?:[^']|'')*)' setup \$argFile/)![1]!;
|
||||
|
||||
Reference in new issue
Block a user