Release 0.1.37 deployment prep

This commit is contained in:
ekklesia
2026-09-06 17:30:30 -05:00
parent 4862e29f57
commit 7f66228b9e
19 changed files with 866 additions and 79 deletions
+104
View File
@@ -0,0 +1,104 @@
#!/bin/bash
set -uo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PYTHONPATH="$ROOT/lib" python3 - <<'PY'
import tempfile
from pathlib import Path
from classroom_config import dock_items, ensure_device_config, read_device_config
passed = failed = 0
def check(label, condition, detail=""):
global passed, failed
if condition:
print(f" ok {label}")
passed += 1
else:
print(f" FAIL {label}")
if detail:
print(f" {detail}")
failed += 1
print("1. dock capabilities")
cases = [
({}, ("browser",)),
({"DVD_ENABLED": "true"}, ("browser", "dvd")),
({"LIVE_ENABLED": "true"}, ("browser", "live")),
(
{"DVD_ENABLED": "true", "LIVE_ENABLED": "true"},
("browser", "dvd", "live"),
),
]
for config, expected in cases:
actual = dock_items(config)
check(f"{config or 'both disabled'} -> {expected}", actual == expected, actual)
check(
"false spellings do not leave placeholder items",
dock_items({"DVD_ENABLED": "false", "LIVE_ENABLED": "off"}) == ("browser",),
)
check(
"existing dock order is browser, DVD, LIVE",
dock_items({"DVD_ENABLED": "yes", "LIVE_ENABLED": "1"})
== ("browser", "dvd", "live"),
)
print()
print("2. fresh device configuration")
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "etc" / "device.conf"
ensure_device_config(path)
config = read_device_config(path)
check("fresh config is created", path.is_file())
check("DVD defaults off", config.get("DVD_ENABLED") == "false")
check("LIVE defaults off", config.get("LIVE_ENABLED") == "false")
check("MQTT defaults off", config.get("MQTT_ENABLED") == "false")
check("stable remains the fresh-install default", config.get("CHANNEL") == "stable")
print()
print("3. upgrade from 0.1.36")
old = """# endpoint configuration from 0.1.36
UPDATE_URL=https://updates.example.test
CHANNEL=canary
DVD_ENABLED=true
UI_SCALE=1.25
MQTT_ENABLED=true
MQTT_HOST=broker.example.test
MQTT_PORT=1884
MQTT_USERNAME=room
MQTT_PASSWORD=secret
CUSTOM_SETTING=keep-me
"""
with tempfile.TemporaryDirectory() as directory:
path = Path(directory) / "device.conf"
path.write_text(old)
ensure_device_config(path)
first = path.read_text()
config = read_device_config(path)
check("old bytes remain at the start", first.startswith(old))
check("channel survives", config.get("CHANNEL") == "canary")
check("DVD choice survives", config.get("DVD_ENABLED") == "true")
check("UI scale survives", config.get("UI_SCALE") == "1.25")
check("MQTT host survives", config.get("MQTT_HOST") == "broker.example.test")
check("MQTT password survives", config.get("MQTT_PASSWORD") == "secret")
check("unknown settings survive", config.get("CUSTOM_SETTING") == "keep-me")
check("LIVE is appended once", first.count("LIVE_ENABLED=") == 1)
ensure_device_config(path)
second = path.read_text()
check("reinstall makes no further change", second == first)
check("LIVE still occurs once", second.count("LIVE_ENABLED=") == 1)
print()
print(f"passed: {passed} failed: {failed}")
raise SystemExit(1 if failed else 0)
PY