diff --git a/CloudronManifest.json b/CloudronManifest.json index b130119..5ca83f4 100644 --- a/CloudronManifest.json +++ b/CloudronManifest.json @@ -4,8 +4,8 @@ "author": "Florian Heinz", "description": "Private Flask app for meals, shopping and gentle food planning", "tagline": "einfach essen planen", - "version": "1.0.0", - "upstreamVersion": "1.0.0", + "version": "1.0.1", + "upstreamVersion": "1.0.1", "healthCheckPath": "/", "httpPort": 8000, "manifestVersion": 2, diff --git a/nouri/__init__.py b/nouri/__init__.py index 26cd33a..c06c45c 100644 --- a/nouri/__init__.py +++ b/nouri/__init__.py @@ -1,5 +1,6 @@ from __future__ import annotations +import json import os import secrets from datetime import date, timedelta @@ -34,6 +35,7 @@ from .main import main_bp WEEKDAY_NAMES = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"] WEEKDAY_SHORT_NAMES = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"] +DEFAULT_RELEASE_URL = "https://git.hnz.io/hnzio/nouri-App/releases" def load_secret_key(data_dir: Path) -> str: @@ -54,11 +56,38 @@ def load_secret_key(data_dir: Path) -> str: return secret_value +def load_app_version(root_dir: Path) -> str: + env_version = os.environ.get("NOURI_APP_VERSION", "").strip() + if env_version: + return env_version + + manifest_path = root_dir / "CloudronManifest.json" + if manifest_path.exists(): + try: + manifest_data = json.loads(manifest_path.read_text(encoding="utf-8")) + except json.JSONDecodeError: + manifest_data = {} + manifest_version = str( + manifest_data.get("upstreamVersion") + or manifest_data.get("version") + or "" + ).strip() + if manifest_version: + return manifest_version + return "1.0.1" + + +def load_release_url() -> str: + return os.environ.get("NOURI_RELEASE_URL", DEFAULT_RELEASE_URL).strip() or DEFAULT_RELEASE_URL + + def create_app() -> Flask: root_dir = Path(__file__).resolve().parent.parent data_dir = Path(os.environ.get("NOURI_DATA_DIR", root_dir / "data")).resolve() upload_dir = data_dir / "uploads" db_path = data_dir / "nouri.sqlite3" + app_version = load_app_version(root_dir) + release_url = load_release_url() data_dir.mkdir(parents=True, exist_ok=True) ensure_upload_structure(upload_dir) @@ -74,7 +103,8 @@ def create_app() -> Flask: SESSION_COOKIE_HTTPONLY=True, SESSION_COOKIE_SAMESITE="Lax", SESSION_COOKIE_SECURE=os.environ.get("NOURI_SECURE_COOKIES", "0") == "1", - APP_VERSION="1.0.0", + APP_VERSION=app_version, + RELEASE_URL=release_url, TIMEZONE=os.environ.get("NOURI_TIMEZONE", "Europe/Berlin"), VAPID_PUBLIC_KEY=os.environ.get("NOURI_VAPID_PUBLIC_KEY", ""), VAPID_PRIVATE_KEY=os.environ.get("NOURI_VAPID_PRIVATE_KEY", ""), @@ -114,6 +144,7 @@ def create_app() -> Flask: "notification_channel_options": NOTIFICATION_CHANNEL_OPTIONS, "today": date.today(), "app_version": app.config["APP_VERSION"], + "app_release_url": app.config["RELEASE_URL"], "push_public_key": app.config["VAPID_PUBLIC_KEY"], "push_available": bool(app.config["VAPID_PUBLIC_KEY"] and app.config["VAPID_PRIVATE_KEY"]), "weekday_name": lambda value: WEEKDAY_NAMES[value.weekday()], diff --git a/nouri/templates/base.html b/nouri/templates/base.html index ab6f61b..2cae425 100644 --- a/nouri/templates/base.html +++ b/nouri/templates/base.html @@ -91,7 +91,7 @@