krz/hutch-stats

Server-side utility for calculating contributions for sourcehut users.

clone: git clone https://gitbay.org/krz/hutch-stats.git

bdbc11e8609b2a40d25b08b5baef17ce7201df77

verified · cmc

author: Christian Cleberg <hello@cleberg.net> · 2026-04-11T17:59:47Z

fix: run alembic migrations against DATABASE_URL in containers
 alembic/env.py           |  5 +++++
 tests/test_migrations.py | 13 +++++++++++++
 2 files changed, 18 insertions(+)

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()