diff --git a/Dockerfile b/Dockerfile index 5e80312..adc18c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,8 @@ COPY frontend/ frontend/ RUN npm run build --prefix frontend FROM python:3.12-slim +ARG APP_VERSION=dev +ENV APP_VERSION=$APP_VERSION WORKDIR /app COPY backend/requirements.txt . diff --git a/backend/admin.py b/backend/admin.py index a7b0b21..600db28 100644 --- a/backend/admin.py +++ b/backend/admin.py @@ -131,7 +131,10 @@ async def get_proxy_info(_ = Depends(require_admin_auth)): host = os.getenv("PROXY_HOST", "0.0.0.0") port = os.getenv("PROXY_PORT", "8000") display_host = "localhost" if host in ("0.0.0.0", "::") else host - return {"endpoint": f"http://{display_host}:{port}"} + return { + "endpoint": f"http://{display_host}:{port}", + "version": os.getenv("APP_VERSION", "dev"), + } @app.get("/api/settings", response_model=schemas.Settings) async def read_settings(db: Session = Depends(get_db), _ = Depends(require_admin_auth)): diff --git a/backend/main.py b/backend/main.py index 88a39cb..3fe71d1 100644 --- a/backend/main.py +++ b/backend/main.py @@ -149,6 +149,10 @@ async def list_models(db: Session = Depends(get_db)): response = await proxy_request(f"{ollama_url}/api/tags", method="GET") return JSONResponse(content=response.json(), status_code=response.status_code) +@app.get("/version") +async def version(): + return {"version": os.getenv("APP_VERSION", "dev")} + @app.get("/api/ps") async def running_models(db: Session = Depends(get_db)): ollama_url = crud.get_setting(db, "ollama_url", os.getenv("OLLAMA_URL", "http://localhost:11434")) diff --git a/build_push.sh b/build_push.sh index 1b408a0..f255478 100755 --- a/build_push.sh +++ b/build_push.sh @@ -37,6 +37,7 @@ echo "" docker buildx build \ --platform "$PLATFORM" \ --push \ + --build-arg APP_VERSION="$VERSION" \ -t "$IMAGE:$VERSION" \ -t "$IMAGE:latest" \ . diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index dca6207..54b1fa1 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -82,6 +82,7 @@ function SettingsSection({ password }) { const [modelsLoading, setModelsLoading] = useState(false); const [ollamaReachable, setOllamaReachable] = useState(true); const [proxyEndpoint, setProxyEndpoint] = useState(null); + const [appVersion, setAppVersion] = useState(null); const [saved, setSaved] = useState(false); const [error, setError] = useState(null); @@ -115,6 +116,7 @@ function SettingsSection({ password }) { const s = settingsRes.data; setSettings(s); setProxyEndpoint(proxyRes.data.endpoint); + setAppVersion(proxyRes.data.version); fetchModels(s.ollama_url, s.force_model); }).catch(() => setError('Einstellungen konnten nicht geladen werden.')); }, []); @@ -145,6 +147,10 @@ function SettingsSection({ password }) { (Änderung erfordert Neustart) +
+ + {appVersion ?? '…'} +