From 2fc7c7eb5401be931c886bcd9905ba989a9dc8c8 Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Thu, 6 Nov 2025 00:42:34 +0100 Subject: [PATCH] improve docker dx with empty migration set (#10774) * if we are in docker and empty - init db * use structlog * remove logging change * reduce diff * ignore in test mode * add changes from review --- src/backend/InvenTree/InvenTree/apps.py | 16 ++++++++++++++-- src/backend/InvenTree/InvenTree/tasks.py | 6 ++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/backend/InvenTree/InvenTree/apps.py b/src/backend/InvenTree/InvenTree/apps.py index 34f74850a3..9038123f69 100644 --- a/src/backend/InvenTree/InvenTree/apps.py +++ b/src/backend/InvenTree/InvenTree/apps.py @@ -321,6 +321,18 @@ class InvenTreeConfig(AppConfig): return if not InvenTree.tasks.check_for_migrations(): - logger.error('INVE-W8: Database Migrations required') - sys.exit(1) + # Detect if this an empty database - if so, start with a fresh migration + if ( + settings.DOCKER + and not InvenTree.ready.isInTestMode() + and not InvenTree.ready.isRunningMigrations() + and InvenTree.tasks.get_migration_count() == 0 + ): + logger.warning( + 'INVE-W8: Empty database detected - trying to run migrations' + ) + InvenTree.tasks.check_for_migrations(force_run=True) + else: + logger.error('INVE-W8: Database Migrations required') + sys.exit(1) MIGRATIONS_CHECK_DONE = True diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index 123ee4f966..5c83d24112 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -661,6 +661,12 @@ def get_migration_plan(): return plan +def get_migration_count(): + """Returns the number of all detected migrations.""" + executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS]) + return executor.loader.applied_migrations + + @tracer.start_as_current_span('check_for_migrations') @scheduled_task(ScheduledTask.DAILY) def check_for_migrations(force: bool = False, reload_registry: bool = True) -> bool: