40 lines
1.2 KiB
Python
Executable File
40 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""Apply PostgreSQL SQL migrations in lexical order."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
if str(REPO_ROOT) not in sys.path:
|
|
sys.path.insert(0, str(REPO_ROOT))
|
|
|
|
from app.db.postgres_connection import apply_migrations # noqa: E402
|
|
|
|
|
|
MIGRATIONS_DIR = REPO_ROOT / "app" / "db" / "migrations"
|
|
|
|
|
|
def run_migrations(database_url: str | None = None, migrations_dir: Path = MIGRATIONS_DIR) -> list[str]:
|
|
return apply_migrations(database_url, migrations_dir)
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(description="Apply AlphaX PostgreSQL migrations.")
|
|
parser.add_argument("--database-url", default=None, help="Override DATABASE_URL.")
|
|
parser.add_argument("--migrations-dir", type=Path, default=MIGRATIONS_DIR)
|
|
args = parser.parse_args()
|
|
|
|
applied = run_migrations(args.database_url, args.migrations_dir)
|
|
if applied:
|
|
print(f"[migrate] applied {len(applied)} migration(s): {', '.join(applied)}")
|
|
else:
|
|
print("[migrate] database already up to date")
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|