* test(windows): hide test helper console windows (#3706) * test(windows): use CREATE_NO_WINDOW constant (#3706) * test(windows): hide test-helper console windows on Windows (#3710 fixes #3706) @rodboev. Long-lived test helper subprocesses (test server, browser-smoke, TLS helper, ctl helpers) now spawn with CREATE_NO_WINDOW on Windows so a local pytest run doesn't pop focus-stealing console windows. sys.platform=='win32' guarded → no-op on macOS/Linux (expands to **{}). Test-only, no production code, no user impact. + CHANGELOG v0.51.301. --------- Co-authored-by: Rod Boev <rod.boev@gmail.com> Co-authored-by: nesquena-hermes <[email protected]>
This commit is contained in:
5 files changed
+18
-3
No files matched your search
@@ -3,6 +3,11 @@
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [v0.51.301] — 2026-06-06 — Release JQ (stage-3710 — hide test-helper console windows on Windows)
|
||||
|
||||
### Changed
|
||||
- **Developer experience (Windows):** the test suite's long-lived helper subprocesses (main test server, browser-smoke server, TLS helper, and the `ctl` test helpers) now spawn with `CREATE_NO_WINDOW` on Windows, so a local `pytest` run no longer pops up several focus-stealing console windows. Windows-only (`sys.platform == "win32"` guard); no behavior change on macOS/Linux. (#3710 fixes #3706, @rodboev)
|
||||
|
||||
## [v0.51.300] — 2026-06-06 — Release JP (stage-3726 — context-length indicator honors provider per-model overrides)
|
||||
|
||||
### Fixed
|
||||
|
||||
@@ -114,6 +114,7 @@ def main():
|
||||
proc = subprocess.Popen(
|
||||
[sys.executable, server_py], cwd=repo_root, env=env,
|
||||
stdout=log, stderr=subprocess.STDOUT,
|
||||
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
|
||||
)
|
||||
try:
|
||||
if not _wait_for_health(timeout=30):
|
||||
|
||||
@@ -636,6 +636,7 @@ def test_server():
|
||||
env=env,
|
||||
stdout=subprocess.DEVNULL,
|
||||
stderr=subprocess.DEVNULL,
|
||||
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
|
||||
)
|
||||
|
||||
if not _wait_for_server(TEST_BASE, timeout=20):
|
||||
|
||||
@@ -143,7 +143,10 @@ def windows_pid(pid: int) -> int | None:
|
||||
|
||||
|
||||
def start_fake_launchd_process() -> subprocess.Popen:
|
||||
return subprocess.Popen(["bash", "-lc", "exec sleep 30"])
|
||||
return subprocess.Popen(
|
||||
["bash", "-lc", "exec sleep 30"],
|
||||
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
|
||||
)
|
||||
|
||||
|
||||
def _kill_tree(pid: int) -> None:
|
||||
@@ -316,7 +319,10 @@ def test_stale_pid_file_is_removed_without_killing_unrelated_process(tmp_path):
|
||||
hermes_home = tmp_path / ".hermes"
|
||||
hermes_home.mkdir()
|
||||
pid_file = hermes_home / "webui.pid"
|
||||
sleeper = subprocess.Popen([sys.executable, "-c", "import time; time.sleep(30)"])
|
||||
sleeper = subprocess.Popen(
|
||||
[sys.executable, "-c", "import time; time.sleep(30)"],
|
||||
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
|
||||
)
|
||||
try:
|
||||
pid_file.write_text(str(sleeper.pid), encoding="utf-8")
|
||||
result = run_ctl(tmp_path, "stop")
|
||||
|
||||
@@ -8,9 +8,10 @@ import json
|
||||
import os
|
||||
import ssl
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import textwrap
|
||||
import time
|
||||
import tempfile
|
||||
import unittest
|
||||
from contextlib import suppress
|
||||
from pathlib import Path
|
||||
@@ -79,6 +80,7 @@ def _start_server(port: int, cert: str = None, key: str = None) -> subprocess.Po
|
||||
[os.sys.executable, str(ROOT / "server.py")],
|
||||
env=env, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,
|
||||
text=True,
|
||||
**({"creationflags": subprocess.CREATE_NO_WINDOW} if sys.platform == "win32" else {}),
|
||||
)
|
||||
return proc
|
||||
|
||||
|
||||
Reference in new issue
Block a user