add SREBOT, SHARED, TSSBOT contents (fixup for #1223)

PR #1223 only staged the deletions of the old paths because the new
top-level directories were still untracked when the commit was authored.
This commit adds the actual restructured tree: SREBOT/ (existing bot),
SHARED/ (vromfs, data_parser, ICONS/MAPS/FONTS, DAGOR_FILES,
update_game_files), and TSSBOT/ (skeleton).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
FURRO404
2026-05-13 23:17:02 -07:00
commit 2b399fdb81
186 changed files with 96596 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
"""
Smoke test for BOT/render_recap.py in --mode player.
Usage:
source .venv/bin/activate && python BOT/tests/smoke_player_recap.py
"""
import sqlite3
import os
import subprocess
import sys
import tempfile
from pathlib import Path
_storage_env = os.environ.get("SREBOT_STORAGE_VOL_PATH", "").strip()
if not _storage_env:
raise RuntimeError("SREBOT_STORAGE_VOL_PATH must be set")
STORAGE = Path(_storage_env)
SEASON_START = "1772348400"
SEASON_END = "1777852799"
SEASON = "2026-II"
def pick_uid() -> str:
conn = sqlite3.connect(f"file:{STORAGE/'sq_battles.db'}?mode=ro", uri=True)
cur = conn.execute(
"SELECT UID FROM player_games_hist "
"WHERE endtime_unix BETWEEN ? AND ? "
"GROUP BY UID ORDER BY COUNT(*) DESC LIMIT 1",
(int(SEASON_START), int(SEASON_END)),
)
row = cur.fetchone()
conn.close()
return row[0] if row else ""
def run_smoke(uid: str, theme: str = "dark", lang: str = "en") -> int:
with tempfile.TemporaryDirectory() as tmp:
out = Path(tmp) / f"player-{theme}-{lang}.png"
cmd = [
sys.executable,
"BOT/render_recap.py",
"--mode", "player",
"--uid", uid,
"--season", SEASON,
"--season-start", SEASON_START,
"--season-end", SEASON_END,
"--theme", theme,
"--lang", lang,
"--out", str(out),
]
print("Running:", " ".join(cmd))
result = subprocess.run(cmd, capture_output=True, text=True)
print("stdout:", result.stdout)
print("stderr:", result.stderr)
if result.returncode != 0:
print(f"FAIL: exit={result.returncode}")
return result.returncode
size = out.stat().st_size if out.exists() else 0
if size < 10_000:
print(f"FAIL: suspicious size {size} bytes at {out}")
return 1
print(f"OK: wrote {size} bytes ({theme}/{lang})")
return 0
def main() -> int:
uid = pick_uid()
if not uid:
print("FAIL: no UID with season activity available for smoke test")
return 1
print(f"Using UID {uid}")
code = 0
for theme in ("light", "dark"):
for lang in ("en", "ru"):
code |= run_smoke(uid, theme=theme, lang=lang)
return code
if __name__ == "__main__":
sys.exit(main())
+50
View File
@@ -0,0 +1,50 @@
"""
Smoke test for BOT/render_recap.py.
Runs the renderer end-to-end against the live HC storage volume databases
and verifies a PNG lands at the --out path.
Usage:
source .venv/bin/activate && python BOT/tests/smoke_recap.py
"""
import subprocess
import sys
import tempfile
from pathlib import Path
def run_smoke(clan_id: int = 123456, season: str = "2026-II") -> int:
"""Run the renderer for a given clan/season; return exit code."""
with tempfile.TemporaryDirectory() as tmp:
out = Path(tmp) / "card.png"
cmd = [
sys.executable,
"BOT/render_recap.py",
"--mode", "squadron",
"--clan-id", str(clan_id),
"--season", season,
"--season-start", "1772348400",
"--season-end", "1777852799",
"--out", str(out),
]
print("Running:", " ".join(cmd))
result = subprocess.run(cmd, capture_output=True, text=True)
print("stdout:", result.stdout)
print("stderr:", result.stderr)
if result.returncode != 0:
print(f"FAIL: exit={result.returncode}")
return result.returncode
if not out.exists():
print(f"FAIL: {out} does not exist")
return 1
if out.stat().st_size == 0:
print(f"FAIL: {out} is empty")
return 1
print(f"OK: wrote {out.stat().st_size} bytes")
return 0
if __name__ == "__main__":
code = run_smoke()
sys.exit(code)