Skip to content

Commit d0b9d5f

Browse files
committed
Support updater regression on Python 3.10
1 parent 735845d commit d0b9d5f

1 file changed

Lines changed: 26 additions & 19 deletions

File tree

scripts/updater-supervisor-regression.py

Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77
import json
88
import os
99
from pathlib import Path
10+
import re
1011
import shutil
1112
import signal
1213
import socket
1314
import subprocess
1415
import sys
1516
import tempfile
1617
import time
17-
import tomllib
1818
from typing import Any
1919
from urllib.error import HTTPError, URLError
2020
from urllib.request import Request, urlopen
@@ -105,20 +105,11 @@ def build_fixture(
105105
return executable.resolve()
106106

107107

108-
def package_version(server_directory: Path) -> tuple[int, int, int]:
109-
with (server_directory / "Cargo.toml").open("rb") as stream:
110-
value = tomllib.load(stream)["package"]["version"]
111-
components = value.split(".")
112-
if len(components) != 3 or not all(component.isdigit() for component in components):
113-
raise RegressionFailure(f"fixture requires a stable numeric package version, got {value}")
114-
return tuple(int(component) for component in components) # type: ignore[return-value]
115-
116-
117-
def validate_root_server(executable: Path, expected_version: str) -> None:
108+
def executable_version(executable: Path, label: str) -> tuple[int, int, int]:
118109
if not executable.is_file():
119-
raise RegressionFailure(f"root server executable does not exist: {executable}")
110+
raise RegressionFailure(f"{label} executable does not exist: {executable}")
120111
if os.name != "nt" and not os.access(executable, os.X_OK):
121-
raise RegressionFailure(f"root server is not executable: {executable}")
112+
raise RegressionFailure(f"{label} executable is not executable: {executable}")
122113
try:
123114
completed = subprocess.run(
124115
[str(executable), "--version"],
@@ -128,12 +119,27 @@ def validate_root_server(executable: Path, expected_version: str) -> None:
128119
timeout=10,
129120
)
130121
except subprocess.TimeoutExpired as error:
131-
raise RegressionFailure("root server --version timed out") from error
122+
raise RegressionFailure(f"{label} --version timed out") from error
123+
except subprocess.CalledProcessError as error:
124+
raise RegressionFailure(
125+
f"{label} --version exited with status {error.returncode}"
126+
) from error
127+
132128
reported = completed.stdout.strip()
133-
expected = f"codex-web {expected_version}"
134-
if reported != expected:
129+
match = re.fullmatch(r"codex-web ([0-9]+)\.([0-9]+)\.([0-9]+)", reported)
130+
if match is None:
131+
raise RegressionFailure(
132+
f"{label} requires a stable numeric codex-web version, got {reported!r}"
133+
)
134+
return tuple(int(component) for component in match.groups()) # type: ignore[return-value]
135+
136+
137+
def validate_root_server(executable: Path, expected_version: str) -> None:
138+
reported_version = version_text(executable_version(executable, "root server"))
139+
if reported_version != expected_version:
135140
raise RegressionFailure(
136-
f"root server version mismatch: expected {expected!r}, got {reported!r}"
141+
"root server version mismatch: "
142+
f"expected {expected_version!r}, got {reported_version!r}"
137143
)
138144

139145

@@ -431,12 +437,13 @@ def run_regression(args: argparse.Namespace) -> dict[str, Any]:
431437
if not fixture.is_file():
432438
raise RegressionFailure(f"fixture executable does not exist: {fixture}")
433439

434-
root_version = version_text(package_version(server_directory))
440+
fixture_version = executable_version(fixture, "fixture")
441+
root_version = version_text(fixture_version)
435442
packaged_root = args.root_server is not None
436443
root_server = args.root_server.resolve() if packaged_root else fixture
437444
if packaged_root:
438445
validate_root_server(root_server, root_version)
439-
first_tuple, second_tuple, failed_tuple = next_versions(package_version(server_directory))
446+
first_tuple, second_tuple, failed_tuple = next_versions(fixture_version)
440447
first_version = version_text(first_tuple)
441448
second_version = version_text(second_tuple)
442449
failed_version = version_text(failed_tuple)

0 commit comments

Comments
 (0)