mirror of
https://github.com/Hmbown/DeepSeek-TUI.git
synced 2026-09-02 22:36:19 +08:00
`check-persistence-backlog-budget.py` runs its measurement through `cargo test -p codewhale-tui --lib` with default features, but the step before it on the same runner is `cargo nextest run --workspace --all-features --locked`. This crate's `--all-features` adds `web` and `long-running-tests` on top of the default `tui,json,toml`, so the two are a different feature unification and Cargo rebuilds the crate and everything downstream of it rather than reusing what was just compiled. It is the second-largest step in the macOS leg: 10 minutes of a 71-minute job, for a test that runs in well under a second. Measured locally, the same command against a warm tree of the *other* feature set takes 9.5s when the features match and 132s when they do not — the delta is entirely the rebuild. Aligning the flag makes the measurement reuse the nextest artifacts. The measured test is unchanged and still runs `--exact --ignored --test-threads=1`, which is what the receipt's determinism depends on.
128 lines
4.1 KiB
Python
Executable File
128 lines
4.1 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Measure the paused-consumer persistence-channel backlog hermetically."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
import os
|
|
import re
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
|
|
RECEIPT_ENV = "CODEWHALE_TEST_PERSISTENCE_BACKLOG_RECEIPT_PATH"
|
|
SOURCE_SHA_ENV = "CODEWHALE_TEST_PERSISTENCE_BACKLOG_SOURCE_SHA"
|
|
SOURCE_DIRTY_ENV = "CODEWHALE_TEST_PERSISTENCE_BACKLOG_SOURCE_DIRTY"
|
|
RUSTC_VERSION_ENV = "CODEWHALE_TEST_PERSISTENCE_BACKLOG_RUSTC_VERSION"
|
|
CARGO_VERSION_ENV = "CODEWHALE_TEST_PERSISTENCE_BACKLOG_CARGO_VERSION"
|
|
ROOT = Path(__file__).resolve().parent.parent
|
|
TEST_NAME = (
|
|
"tui::persistence_actor::backlog_measurement_tests::"
|
|
"write_paused_persistence_backlog_measurement_receipt"
|
|
)
|
|
|
|
|
|
class PersistenceBacklogMeasurementError(RuntimeError):
|
|
"""The exact measurement test did not produce a trustworthy receipt."""
|
|
|
|
|
|
def measurement_command() -> list[str]:
|
|
return [
|
|
"cargo",
|
|
"test",
|
|
"--locked",
|
|
# Match the feature set CI's `cargo nextest run --workspace
|
|
# --all-features` already built. Default features are a *different*
|
|
# unification (this crate's `--all-features` adds `web` and
|
|
# `long-running-tests`), so asking for them here rebuilt the crate and
|
|
# its dependents from scratch — ten minutes of the macOS leg spent
|
|
# recompiling artifacts the previous step had already produced.
|
|
"--all-features",
|
|
"-p",
|
|
"codewhale-tui",
|
|
"--lib",
|
|
TEST_NAME,
|
|
"--",
|
|
"--exact",
|
|
"--ignored",
|
|
"--test-threads=1",
|
|
]
|
|
|
|
|
|
def run_measurement(receipt_path: Path, env: dict[str, str]) -> dict:
|
|
result = subprocess.run(
|
|
measurement_command(),
|
|
cwd=ROOT,
|
|
env=env,
|
|
text=True,
|
|
capture_output=True,
|
|
check=False,
|
|
)
|
|
sys.stderr.write(result.stderr)
|
|
if result.returncode != 0:
|
|
sys.stdout.write(result.stdout)
|
|
result.check_returncode()
|
|
|
|
combined = "\n".join(result.stdout.splitlines() + result.stderr.splitlines())
|
|
if re.search(r"\brunning\s+0\s+tests?\b", combined):
|
|
sys.stdout.write(result.stdout)
|
|
raise PersistenceBacklogMeasurementError(
|
|
f"exact library measurement test {TEST_NAME} ran zero tests"
|
|
)
|
|
try:
|
|
return json.loads(receipt_path.read_text(encoding="utf-8"))
|
|
except (OSError, json.JSONDecodeError) as error:
|
|
raise PersistenceBacklogMeasurementError(
|
|
f"exact library measurement test {TEST_NAME} emitted no valid receipt: {error}"
|
|
) from error
|
|
|
|
|
|
def main() -> int:
|
|
source_sha = subprocess.run(
|
|
["git", "rev-parse", "HEAD"],
|
|
cwd=ROOT,
|
|
text=True,
|
|
capture_output=True,
|
|
check=True,
|
|
).stdout.strip()
|
|
source_dirty = bool(
|
|
subprocess.run(
|
|
["git", "status", "--porcelain", "--untracked-files=normal"],
|
|
cwd=ROOT,
|
|
text=True,
|
|
capture_output=True,
|
|
check=True,
|
|
).stdout
|
|
)
|
|
rustc_version = subprocess.run(
|
|
["rustc", "--version"], text=True, capture_output=True, check=True
|
|
).stdout.strip()
|
|
cargo_version = subprocess.run(
|
|
["cargo", "--version"], text=True, capture_output=True, check=True
|
|
).stdout.strip()
|
|
with tempfile.TemporaryDirectory(prefix="codewhale-persistence-backlog-") as root:
|
|
receipt_path = Path(root) / "receipt.json"
|
|
env = os.environ.copy()
|
|
env["CARGO_NET_OFFLINE"] = "true"
|
|
env[RECEIPT_ENV] = str(receipt_path)
|
|
env[SOURCE_SHA_ENV] = source_sha
|
|
env[SOURCE_DIRTY_ENV] = str(source_dirty).lower()
|
|
env[RUSTC_VERSION_ENV] = rustc_version
|
|
env[CARGO_VERSION_ENV] = cargo_version
|
|
try:
|
|
receipt = run_measurement(receipt_path, env)
|
|
except subprocess.CalledProcessError as error:
|
|
return error.returncode
|
|
except PersistenceBacklogMeasurementError as error:
|
|
sys.stderr.write(f"invalid persistence backlog receipt: {error}\n")
|
|
return 1
|
|
|
|
print(json.dumps(receipt, indent=2, sort_keys=True))
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|