diff --git a/backend/Dockerfile b/backend/Dockerfile index 4dfb611..5bc5633 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -2,8 +2,11 @@ FROM python:3.12-slim WORKDIR /app +ARG BUILD_NUMBER=dev + ENV PYTHONDONTWRITEBYTECODE=1 \ - PYTHONUNBUFFERED=1 + PYTHONUNBUFFERED=1 \ + SITE_BUILD_NUMBER=${BUILD_NUMBER} COPY backend/requirements.txt . RUN pip install --no-cache-dir -r requirements.txt diff --git a/backend/app/main.py b/backend/app/main.py index 6be34b0..9b46dc8 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -4,7 +4,7 @@ from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from .config import settings -from .db import init_db +from .db import init_db, set_setting from .routers.requests import ( router as requests_router, startup_warmup_requests_cache, @@ -41,6 +41,8 @@ async def health() -> dict: @app.on_event("startup") async def startup() -> None: init_db() + if settings.site_build_number and settings.site_build_number.strip(): + set_setting("site_build_number", settings.site_build_number.strip()) runtime = get_runtime_settings() configure_logging(runtime.log_level, runtime.log_file) asyncio.create_task(run_daily_jellyfin_sync()) diff --git a/docker-compose.yml b/docker-compose.yml index 97b0ead..1686bba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,8 @@ services: build: context: . dockerfile: backend/Dockerfile + args: + BUILD_NUMBER: ${BUILD_NUMBER} env_file: - ./.env ports: diff --git a/frontend/app/admin/SettingsPage.tsx b/frontend/app/admin/SettingsPage.tsx index d09dc12..eb96b5f 100644 --- a/frontend/app/admin/SettingsPage.tsx +++ b/frontend/app/admin/SettingsPage.tsx @@ -300,7 +300,7 @@ export default function SettingsPage({ section }: SettingsPageProps) { requests_data_source: 'Pick where Magent should read requests from.', log_level: 'How much detail is written to the activity log.', log_file: 'Where the activity log is stored.', - site_build_number: 'Version or build identifier shown in the footer.', + site_build_number: 'Build number shown in the footer (auto-set from releases).', site_banner_enabled: 'Enable a sitewide banner for announcements.', site_banner_message: 'Short banner message for maintenance or updates.', site_banner_tone: 'Visual tone for the banner.', diff --git a/scripts/build_release.ps1 b/scripts/build_release.ps1 new file mode 100644 index 0000000..70bed2e --- /dev/null +++ b/scripts/build_release.ps1 @@ -0,0 +1,26 @@ +$ErrorActionPreference = "Stop" + +$repoRoot = Resolve-Path "$PSScriptRoot\\.." +Set-Location $repoRoot + +$now = Get-Date +$buildNumber = "{0}{1}{2}{3}{4}" -f $now.ToString("dd"), $now.ToString("M"), $now.ToString("yy"), $now.ToString("HH"), $now.ToString("mm") + +Write-Host "Build number: $buildNumber" + +git tag $buildNumber +git push origin $buildNumber + +$backendImage = "rephl3xnz/magent-backend:$buildNumber" +$frontendImage = "rephl3xnz/magent-frontend:$buildNumber" + +docker build -f backend/Dockerfile -t $backendImage --build-arg BUILD_NUMBER=$buildNumber . +docker build -f frontend/Dockerfile -t $frontendImage frontend + +docker tag $backendImage rephl3xnz/magent-backend:latest +docker tag $frontendImage rephl3xnz/magent-frontend:latest + +docker push $backendImage +docker push $frontendImage +docker push rephl3xnz/magent-backend:latest +docker push rephl3xnz/magent-frontend:latest