Manifestbasierter Production-Updater 3.3, Modulnavigation, optionales Produktbild Studio, Listing-Studio-Aktionsleiste sowie plattformübergreifende Windows-/Linux-Release-Gates.
33 lines
1.8 KiB
Python
33 lines
1.8 KiB
Python
from pathlib import Path
|
|
import re
|
|
import sqlite3
|
|
import tempfile
|
|
|
|
root = Path(__file__).resolve().parent.parent
|
|
source = (root / 'lib' / 'db.mjs').read_text(encoding='utf-8')
|
|
required = ['deployment_runs', 'deployment_events', 'backup_verifications', 'production_checks']
|
|
statements = {}
|
|
for table in required:
|
|
match = re.search(rf"db\.exec\(`(CREATE TABLE IF NOT EXISTS {re.escape(table)} \(.*?\n \))`\);", source, re.S)
|
|
if not match:
|
|
raise SystemExit(f'Fehlende CREATE-TABLE-Anweisung: {table}')
|
|
statements[table] = match.group(1)
|
|
|
|
with tempfile.NamedTemporaryFile(suffix='.db') as handle:
|
|
con = sqlite3.connect(handle.name)
|
|
con.execute('PRAGMA foreign_keys = ON')
|
|
con.execute('CREATE TABLE users (id INTEGER PRIMARY KEY)')
|
|
con.execute('CREATE TABLE operation_backups (id TEXT PRIMARY KEY)')
|
|
for table in required:
|
|
con.execute(statements[table])
|
|
con.execute("INSERT INTO deployment_runs (id,idempotency_key,current_version,target_version) VALUES ('r1','idem-0001','1.41.2','1.42.0')")
|
|
con.execute("INSERT INTO deployment_events (run_id,state,event_type,message) VALUES ('r1','checking','run.created','created')")
|
|
con.execute("INSERT INTO operation_backups (id) VALUES ('b1')")
|
|
con.execute("INSERT INTO backup_verifications (id,backup_id,deployment_run_id,status) VALUES ('v1','b1','r1','verified')")
|
|
con.execute("INSERT INTO production_checks (id,overall_status) VALUES ('p1','passed')")
|
|
assert con.execute('SELECT count(*) FROM deployment_events WHERE run_id = ?', ('r1',)).fetchone()[0] == 1
|
|
assert con.execute('PRAGMA foreign_key_check').fetchall() == []
|
|
assert con.execute('PRAGMA integrity_check').fetchone()[0] == 'ok'
|
|
|
|
print('Production-Operations-DB-Gate 1.42.0 erfolgreich: additive Tabellen, Fremdschlüssel und SQLite-Integrität geprüft.')
|