From a96aab33cba318a1017df173783ca9db3e58aa02 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 3 Dec 2025 13:33:04 +0300 Subject: [PATCH 1/2] Features: 1) Add initialization timestamp tracking to prevent redundant instance initialization; 2) Include `.initialized` file in `.gitignore` for production environments; Fixes: 1) Remove unnecessary pragma from `install_aiohttp_webhook` definition; Extra: 1) Add logging for `.initialized` read/write failures; 2) General cleanup and formatting improvements in initialization logic; --- .gitignore | 5 +++- engine/core/management/commands/initialize.py | 24 +++++++++++++++++++ .../messaging/forwarders/telegram.py | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2f13695e..77be66d4 100644 --- a/.gitignore +++ b/.gitignore @@ -164,4 +164,7 @@ cypress/screenshots/ .env # Development stuff -test.ipynb \ No newline at end of file +test.ipynb + +# Production stuff +.initialized \ No newline at end of file diff --git a/engine/core/management/commands/initialize.py b/engine/core/management/commands/initialize.py index ca94dde7..72f9e022 100644 --- a/engine/core/management/commands/initialize.py +++ b/engine/core/management/commands/initialize.py @@ -1,4 +1,5 @@ import logging +from datetime import datetime from typing import Any from django.conf import settings @@ -130,6 +131,24 @@ class Command(BaseCommand): def handle(self, *args: list[Any], **options: dict[Any, Any]) -> None: self.stdout.write("Initializing must-have instances...") + initialized_path = settings.BASE_DIR / ".initialized" + + stored_date: datetime | None = None + if initialized_path.exists(): + try: + content = initialized_path.read_text(encoding="utf-8").strip() + if content: + stored_date = datetime.fromisoformat(content) + except Exception as exc: + logger.warning("Failed to parse .initialized content: %s", exc) + + if stored_date is None: + stored_date = datetime.min + + if not (settings.RELEASE_DATE > stored_date): + self.stdout.write(self.style.WARNING("Initialization skipped: already up-to-date.")) + return + Vendor.objects.get_or_create(name="INNER") user_support, is_user_support_created = Group.objects.get_or_create(name="User Support") @@ -160,4 +179,9 @@ class Command(BaseCommand): valid_codes = [code for code, _ in settings.LANGUAGES] (User.objects.filter(Q(language="") | ~Q(language__in=valid_codes)).update(language=settings.LANGUAGE_CODE)) + try: + initialized_path.write_text(settings.RELEASE_DATE.isoformat(), encoding="utf-8") + except Exception as exc: + logger.error("Failed to update .initialized file: %s", exc) + self.stdout.write(self.style.SUCCESS("Successfully initialized must-have instances!")) diff --git a/engine/vibes_auth/messaging/forwarders/telegram.py b/engine/vibes_auth/messaging/forwarders/telegram.py index 0caf5e76..84f91c14 100644 --- a/engine/vibes_auth/messaging/forwarders/telegram.py +++ b/engine/vibes_auth/messaging/forwarders/telegram.py @@ -181,7 +181,7 @@ async def forward_thread_message_to_assigned_staff(thread_uuid: str, text: str) logger.warning("Failed to forward Telegram message for thread %s: %s", _tid, exc) -def install_aiohttp_webhook(app) -> None: # pragma: no cover - integration helper +def install_aiohttp_webhook(app) -> None: if not is_telegram_enabled(): logger.warning("Telegram forwarder not installed: disabled") return From d6e308a10f90178dbaba2dab29032b8f6ecc848b Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Wed, 3 Dec 2025 14:45:12 +0300 Subject: [PATCH 2/2] Features: 1) Add tty check for all interactive prompts to support non-interactive environments; 2) Provide fallback behavior for non-tty sessions. Fixes: 1) Ensure prompts do not stall in non-interactive sessions. Extra: 1) Minor adjustments to prompt messages for better clarity; 2) Refactor prompt logic for improved robustness. --- scripts/Unix/generate-environment-file.sh | 32 ++++++++++++++++++----- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/scripts/Unix/generate-environment-file.sh b/scripts/Unix/generate-environment-file.sh index e3fe3061..eeac970d 100755 --- a/scripts/Unix/generate-environment-file.sh +++ b/scripts/Unix/generate-environment-file.sh @@ -8,8 +8,16 @@ get_random_hex() { } prompt_default() { - printf "Enter %s [%s]: " "$1" "$2" - read -r response + if [ -t 0 ]; then + printf "Enter %s [%s]: " "$1" "$2" + if read -r response &2 - printf "Press Enter to continue or Ctrl+C to abort" - read -r + if [ -t 0 ]; then + printf "Press Enter to continue or Ctrl+C to abort: " + read -r _ &2 + fi fi EVIBES_PROJECT_NAME=$(prompt_default EVIBES_PROJECT_NAME eVibes)