aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alembic/env.py5
-rw-r--r--tests/test_migrations.py13
2 files changed, 18 insertions, 0 deletions
diff --git a/alembic/env.py b/alembic/env.py
index 6fcbeb0..90f262b 100644
--- a/alembic/env.py
+++ b/alembic/env.py
@@ -1,6 +1,7 @@
from __future__ import annotations
from logging.config import fileConfig
+import os
from alembic import context
from sqlalchemy import engine_from_config, pool
@@ -18,6 +19,10 @@ target_metadata = Base.metadata
def get_database_url() -> str:
+ env_database_url = os.getenv("DATABASE_URL")
+ if env_database_url:
+ return env_database_url
+
configured_url = config.get_main_option("sqlalchemy.url")
if configured_url:
return configured_url
diff --git a/tests/test_migrations.py b/tests/test_migrations.py
index de9cb25..d572af2 100644
--- a/tests/test_migrations.py
+++ b/tests/test_migrations.py
@@ -115,3 +115,16 @@ def test_alembic_upgrade_adopts_legacy_schema(tmp_path) -> None:
assert columns["actor"]["nullable"] is False
assert "uq_tracked_repository_service_actor_name" in unique_constraints
assert actor == Settings().default_actor
+
+
+def test_alembic_prefers_database_url_from_environment(tmp_path, monkeypatch) -> None:
+ database_path = tmp_path / "env-selected.db"
+ database_url = f"sqlite:///{database_path}"
+ config = Config(str(Path(__file__).resolve().parent.parent / "alembic.ini"))
+ config.set_main_option("script_location", str(Path(__file__).resolve().parent.parent / "alembic"))
+ monkeypatch.setenv("DATABASE_URL", database_url)
+
+ command.upgrade(config, "head")
+
+ inspector = inspect(create_engine(database_url))
+ assert "actor_aliases" in inspector.get_table_names()