Frontend kann jetzt erkennen, wann eine neue Version live ist, und dem Nutzer einen passenden Hinweis sowie die Release-Notes anzeigen. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
55 Zeilen
1.6 KiB
Python
55 Zeilen
1.6 KiB
Python
"""Version + Release-Notes-Endpoints fuer das Frontend-Update-System."""
|
|
import json
|
|
import subprocess
|
|
from datetime import datetime, timezone
|
|
from pathlib import Path
|
|
from fastapi import APIRouter
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parent.parent.parent
|
|
RELEASES_FILE = REPO_ROOT / 'RELEASES.json'
|
|
|
|
# Version-Hash beim Boot einmalig auslesen.
|
|
try:
|
|
COMMIT_HASH = subprocess.check_output(
|
|
['git', 'rev-parse', '--short=10', 'HEAD'],
|
|
cwd=str(REPO_ROOT), text=True, timeout=5
|
|
).strip()
|
|
except Exception:
|
|
COMMIT_HASH = 'unknown'
|
|
|
|
DEPLOYED_AT = datetime.now(timezone.utc).isoformat()
|
|
|
|
router = APIRouter(tags=['version'])
|
|
|
|
|
|
@router.get('/api/version')
|
|
def version():
|
|
return {'commit': COMMIT_HASH, 'deployed_at': DEPLOYED_AT}
|
|
|
|
|
|
@router.get('/api/release-notes')
|
|
def release_notes(since: str = '', limit: int = 5):
|
|
"""Liefert Release-Notes seit der gegebenen Version.
|
|
|
|
'since' = letzte vom User gesehene Version. Liefert alle Eintraege NEUER
|
|
als diese Version. Ohne 'since' werden die letzten 'limit' Eintraege
|
|
geliefert.
|
|
"""
|
|
if not RELEASES_FILE.exists():
|
|
return {'entries': [], 'current': COMMIT_HASH}
|
|
try:
|
|
with open(RELEASES_FILE, 'r', encoding='utf-8') as f:
|
|
data = json.load(f)
|
|
except Exception as e:
|
|
return {'entries': [], 'error': f'parse-failed: {e}'}
|
|
|
|
if since:
|
|
result = []
|
|
for entry in data:
|
|
if entry.get('version') == since:
|
|
break
|
|
result.append(entry)
|
|
return {'entries': result[:limit], 'current': COMMIT_HASH}
|
|
|
|
return {'entries': data[:limit], 'current': COMMIT_HASH}
|