mirror of
https://github.com/arc53/DocsGPT.git
synced 2026-05-07 06:30:03 +00:00
56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""One-shot bootstrap: run all Alembic migrations against POSTGRES_URI.
|
|
|
|
Intended use:
|
|
|
|
* local dev, after setting ``POSTGRES_URI`` in ``.env``::
|
|
|
|
python scripts/db/init_postgres.py
|
|
|
|
* CI, as a step before running the pytest suite.
|
|
|
|
* Docker image build or container start, if the operator wants the
|
|
migrations applied automatically on first boot.
|
|
|
|
This script is a thin wrapper around ``alembic upgrade head``. It exists
|
|
separately so the same command is discoverable from the repo root without
|
|
remembering the ``-c application/alembic.ini`` invocation.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from alembic import command
|
|
from alembic.config import Config
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
ALEMBIC_INI = REPO_ROOT / "application" / "alembic.ini"
|
|
|
|
|
|
def main() -> int:
|
|
"""Apply every pending migration up to ``head``.
|
|
|
|
Returns:
|
|
``0`` on success, ``1`` on failure. Non-zero is propagated as the
|
|
process exit code so CI jobs fail loudly.
|
|
"""
|
|
if not ALEMBIC_INI.exists():
|
|
print(f"alembic.ini not found at {ALEMBIC_INI}", file=sys.stderr)
|
|
return 1
|
|
|
|
cfg = Config(str(ALEMBIC_INI))
|
|
# Make `script_location` resolve correctly when invoked from any cwd.
|
|
cfg.set_main_option("script_location", str(ALEMBIC_INI.parent / "alembic"))
|
|
|
|
try:
|
|
command.upgrade(cfg, "head")
|
|
except Exception as exc: # noqa: BLE001 — surface everything to the operator
|
|
print(f"alembic upgrade failed: {exc}", file=sys.stderr)
|
|
return 1
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|