From 25d5e48dacd70b1d5ccf72b6db5a55c248053f68 Mon Sep 17 00:00:00 2001 From: Space-Banane Date: Fri, 22 May 2026 19:36:25 +0200 Subject: [PATCH] Make initial migration downgrade resilient to missing tables --- alembic/versions/0001_initial.py | 34 +++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/alembic/versions/0001_initial.py b/alembic/versions/0001_initial.py index de50aa7..a99d57e 100644 --- a/alembic/versions/0001_initial.py +++ b/alembic/versions/0001_initial.py @@ -7,8 +7,8 @@ Create Date: 2026-05-22 19:00:00 from typing import Sequence, Union -from alembic import op import sqlalchemy as sa +from alembic import op revision: str = "0001_initial" @@ -92,16 +92,32 @@ def upgrade() -> None: def downgrade() -> None: - op.drop_index("ix_bot_comments_repo_pr", table_name="bot_comments") - op.drop_table("bot_comments") + bind = op.get_bind() + inspector = sa.inspect(bind) - op.drop_index("ix_review_runs_job_status", table_name="review_runs") - op.drop_table("review_runs") + def has_table(table_name: str) -> bool: + return table_name in inspector.get_table_names() - op.drop_index("ix_review_jobs_lookup", table_name="review_jobs") - op.drop_table("review_jobs") + def has_index(table_name: str, index_name: str) -> bool: + return any(index["name"] == index_name for index in inspector.get_indexes(table_name)) - op.drop_table("webhook_events") + if has_table("bot_comments"): + if has_index("bot_comments", "ix_bot_comments_repo_pr"): + op.drop_index("ix_bot_comments_repo_pr", table_name="bot_comments") + op.drop_table("bot_comments") + + if has_table("review_runs"): + if has_index("review_runs", "ix_review_runs_job_status"): + op.drop_index("ix_review_runs_job_status", table_name="review_runs") + op.drop_table("review_runs") + + if has_table("review_jobs"): + if has_index("review_jobs", "ix_review_jobs_lookup"): + op.drop_index("ix_review_jobs_lookup", table_name="review_jobs") + op.drop_table("review_jobs") + + if has_table("webhook_events"): + op.drop_table("webhook_events") sa.Enum(name="runstatus").drop(op.get_bind(), checkfirst=True) - sa.Enum(name="jobstatus").drop(op.get_bind(), checkfirst=True) \ No newline at end of file + sa.Enum(name="jobstatus").drop(op.get_bind(), checkfirst=True)