diff --git a/.gitea/workflows/docker.yml b/.gitea/workflows/docker.yml index c23df66..a1c23ce 100644 --- a/.gitea/workflows/docker.yml +++ b/.gitea/workflows/docker.yml @@ -27,6 +27,7 @@ jobs: push: true build-args: | VERSION=latest + GIT_SHA=${{ gitea.sha }} tags: | ${{ env.REGISTRY }}/${{ gitea.repository_owner }}/streamrip-ui-backend:latest diff --git a/backend/Dockerfile b/backend/Dockerfile index a8c63e9..4f18368 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -28,6 +28,9 @@ RUN chown -R appuser:appuser /app ARG VERSION=dev ENV APP_VERSION=$VERSION +ARG GIT_SHA=dev +ENV APP_COMMIT=$GIT_SHA + USER appuser EXPOSE 8000 diff --git a/backend/app/core/settings.py b/backend/app/core/settings.py index 50fd4b8..cf0566e 100644 --- a/backend/app/core/settings.py +++ b/backend/app/core/settings.py @@ -10,6 +10,7 @@ DOWNLOAD_DIR = os.environ.get( "STREAMRIP_DOWNLOAD_DIR", str(Path.home() / "StreamripDownloads") ) APP_VERSION = os.environ.get("APP_VERSION", "dev") +APP_COMMIT = os.environ.get("APP_COMMIT", "dev") DEFAULT_QUALITY = int(os.environ.get("STREAMRIP_DEFAULT_QUALITY", "2")) DEFAULT_CODEC = os.environ.get("STREAMRIP_DEFAULT_CODEC", "") SOURCES = ["deezer"] diff --git a/backend/app/main.py b/backend/app/main.py index d6a6f7f..d8c6346 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -45,7 +45,7 @@ def health(): @app.get("/api/version") def version(): - return {"version": settings.APP_VERSION} + return {"version": settings.APP_VERSION, "commit": settings.APP_COMMIT} @app.get("/api/sources") diff --git a/backend/tests/test_health.py b/backend/tests/test_health.py index 1233009..07e4eac 100644 --- a/backend/tests/test_health.py +++ b/backend/tests/test_health.py @@ -20,7 +20,8 @@ def test_version_endpoint(monkeypatch): from app.core import settings monkeypatch.setattr(settings, "APP_VERSION", "2026.10.04.7") + monkeypatch.setattr(settings, "APP_COMMIT", "abc1234") c = TestClient(app) r = c.get("/api/version") assert r.status_code == 200 - assert r.json() == {"version": "2026.10.04.7"} + assert r.json() == {"version": "2026.10.04.7", "commit": "abc1234"} diff --git a/docker-compose.yml b/docker-compose.yml index 784bcb1..c477a09 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,6 +6,7 @@ services: UID: ${UID:-1000} GID: ${GID:-1000} VERSION: ${APP_VERSION:-dev} + GIT_SHA: ${GIT_SHA:-dev} ports: - "${BACKEND_HOST_PORT:-8000}:${BACKEND_PORT:-8000}" environment: diff --git a/frontend/app/components/Header.tsx b/frontend/app/components/Header.tsx index 7208826..22e0d79 100644 --- a/frontend/app/components/Header.tsx +++ b/frontend/app/components/Header.tsx @@ -8,8 +8,8 @@ import { loadBasket } from "../lib/basket"; const NAV = [ { href: "/", label: "Suche" }, { href: "/discover", label: "Entdecken" }, - { href: "/downloads", label: "Downloads" }, { href: "/basket", label: "Korb" }, + { href: "/downloads", label: "Downloads" }, { href: "/settings", label: "Einstellungen" }, ]; @@ -17,6 +17,7 @@ export default function Header() { const pathname = usePathname(); const [backendOk, setBackendOk] = useState(null); const [appVersion, setAppVersion] = useState(""); + const [appCommit, setAppCommit] = useState(""); const [theme, setTheme] = useState<"dark" | "light">("dark"); const [basketCount, setBasketCount] = useState(0); @@ -65,7 +66,9 @@ export default function Header() { fetch("/api/version") .then((r) => r.json()) .then((b) => { - if (alive && b?.version) setAppVersion(b.version); + if (!alive) return; + if (b?.version) setAppVersion(b.version); + if (b?.commit) setAppCommit(String(b.commit).slice(0, 7)); }) .catch(() => {}); return () => { @@ -107,9 +110,9 @@ export default function Header() { }} /> streamrip-ui - {appVersion && ( - - v{appVersion} + {(appVersion || appCommit) && ( + + v{appVersion}{appCommit ? ` ยท ${appCommit}` : ""} )}