diff --git a/Dockerfile b/Dockerfile index 0ecb2e3..fd8c112 100644 --- a/Dockerfile +++ b/Dockerfile @@ -37,6 +37,7 @@ WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY app/ ./ +COPY VERSION ./VERSION COPY --from=frontend-builder /app/web/dist ./web/dist RUN mkdir -p /data/scans /data/db /data/auth /data/logs /var/log/scan2target /tmp/scan2target/scans \ diff --git a/app/main.py b/app/main.py index 0da970e..1273873 100644 --- a/app/main.py +++ b/app/main.py @@ -60,12 +60,23 @@ def no_cache_file(path: Path, media_type: str | None = None) -> FileResponse: def get_version() -> str: - version_file = Path(__file__).parent.parent / "VERSION" - try: - return version_file.read_text().strip() - except OSError as exc: - logger.warning("Could not read VERSION file (%s): %s", version_file, exc) - return "0.0.0" + """Read the version from VERSION, next to the app or at the repo root.""" + env_version = os.environ.get("SCAN2TARGET_VERSION", "").strip() + if env_version: + return env_version + + # In the container the app lives at /app, in a checkout at /app. + candidates = ( + Path(__file__).parent / "VERSION", + Path(__file__).parent.parent / "VERSION", + ) + for version_file in candidates: + try: + return version_file.read_text().strip() + except OSError: + continue + logger.warning("Could not read VERSION file (tried: %s)", ", ".join(str(c) for c in candidates)) + return "0.0.0" @asynccontextmanager diff --git a/app/web/src/App.svelte b/app/web/src/App.svelte index b849f89..410d3d3 100644 --- a/app/web/src/App.svelte +++ b/app/web/src/App.svelte @@ -6,6 +6,7 @@ import Sidebar from './components/layout/Sidebar.svelte'; import Topbar from './components/layout/Topbar.svelte'; import BottomNav from './components/layout/BottomNav.svelte'; + import Footer from './components/layout/Footer.svelte'; import Toast from './components/ui/Toast.svelte'; import LoginOverlay from './components/LoginOverlay.svelte'; import NewScanView from './views/NewScanView.svelte'; @@ -48,6 +49,7 @@ {:else if state.page === 'manage'} {:else}{/if} +