From d462141ccde29207ddf6849199626f6632c7da46 Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Sat, 14 Mar 2026 21:54:08 +0100 Subject: [PATCH] fix: migration runner continues on failure instead of aborting Previously, a single failed migration would abort all subsequent migrations via raise RuntimeError. Now the runner logs the failure and continues with remaining migrations, so independent schema changes (e.g. 050-053) are not blocked by an unrelated failure in an earlier migration (e.g. 048). Co-Authored-By: Claude Opus 4.6 --- backend-compliance/migration_runner.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/backend-compliance/migration_runner.py b/backend-compliance/migration_runner.py index 8afb211..e275a90 100644 --- a/backend-compliance/migration_runner.py +++ b/backend-compliance/migration_runner.py @@ -79,6 +79,7 @@ def run_migrations(): logger.info("%d pending migrations (of %d total)", len(pending), len(migration_files)) + failed = [] for migration_file in pending: logger.info("Applying migration: %s", migration_file.name) try: @@ -96,11 +97,14 @@ def run_migrations(): except Exception as e: raw_conn.rollback() logger.error(" FAILED: %s — %s", migration_file.name, e) - raise RuntimeError( - f"Migration {migration_file.name} failed: {e}" - ) from e + failed.append((migration_file.name, str(e))) + # Continue with remaining migrations instead of aborting - logger.info("All migrations applied successfully") + if failed: + names = ", ".join(f[0] for f in failed) + logger.error("Some migrations failed: %s", names) + else: + logger.info("All migrations applied successfully") finally: raw_conn.close()