Fix absolute path.

This commit is contained in:
febux 2026-08-26 20:24:22 +03:00
parent afe1aebf9d
commit 622745487e
10 changed files with 42 additions and 34 deletions

View file

@ -161,7 +161,7 @@ admin-list: ## List current admin users
# Auth / tokens
# ─────────────────────────────────────────────────────────────────────────────
seed-token: ## Generate bot service token (prints bearer token)
docker compose --profile services exec api python -m contract_check.api seed-token bot-prod bot
docker compose --profile services exec api python -m src.contract_check.api seed-token bot-prod bot
jwt-secret: ## Generate a fresh JWT_SECRET for .env
@openssl rand -hex 32

View file

@ -40,7 +40,7 @@ def main() -> None:
args = sys.argv[1:]
if args and args[0] == "seed-token":
if len(args) not in (3, 4):
print("Usage: python -m contract_check.api seed-token NAME ADAPTER [TOKEN]")
print("Usage: python -m src.contract_check.api seed-token NAME ADAPTER [TOKEN]")
sys.exit(1)
_, name, adapter, *provided = args
asyncio.run(_seed_token(name, adapter, provided[0] if provided else None))

View file

@ -14,12 +14,10 @@ COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY alembic.ini ./
COPY migrations ./migrations
COPY src ./src
# Install only the api group (core + db/mq/s3/obs + fastapi/uvicorn).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group api --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group api --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -31,8 +29,11 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
COPY alembic.ini ./
COPY migrations ./migrations
EXPOSE 8000 9100
CMD ["python", "-m", "contract_check.api"]
CMD ["python", "-m", "src.contract_check.api"]

View file

@ -12,13 +12,11 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the bot group (core + aiogram). No DB/MQ/S3/LLM/OCR drivers —
# this is the leanest service image; it speaks HTTP to the api exclusively.
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group bot --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group bot --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -31,4 +29,7 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
CMD ["python", "-m", "contract_check.bot"]
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
CMD ["python", "-m", "src.contract_check.bot"]

View file

@ -14,12 +14,10 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the prototype group (core + pymupdf/python-docx).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group prototype --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group prototype --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -32,4 +30,7 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
CMD ["python", "-m", "contract_check.prototype"]
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
CMD ["python", "-m", "src.contract_check.prototype"]

View file

@ -12,13 +12,11 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the analyze group (core + db/mq/s3/obs + otel-httpx). No
# tesseract/pymupdf — this image is the leanest LLM/I/O worker.
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group analyze --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group analyze --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -31,5 +29,8 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
EXPOSE 9102
CMD ["python", "-m", "contract_check.worker_analyze"]
CMD ["python", "-m", "src.contract_check.worker_analyze"]

View file

@ -12,11 +12,9 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group billing --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group billing --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -29,5 +27,8 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
EXPOSE 9105
CMD ["python", "-m", "contract_check.worker_billing"]
CMD ["python", "-m", "src.contract_check.worker_billing"]

View file

@ -12,12 +12,10 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the extract group (core + db/mq/s3/obs + pymupdf/tesseract).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group extract --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group extract --no-install-project
# ─── Stage 2: runtime with tesseract-ocr + language packs ────────────────────
FROM python:3.13-slim
@ -40,5 +38,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
EXPOSE 9101
CMD ["python", "-m", "contract_check.worker_extract"]
CMD ["python", "-m", "src.contract_check.worker_extract"]

View file

@ -12,12 +12,10 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the notify group (core + db/mq/obs + aiosmtplib).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group notify --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group notify --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -30,5 +28,8 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
EXPOSE 9103
CMD ["python", "-m", "contract_check.worker_notify"]
CMD ["python", "-m", "src.contract_check.worker_notify"]

View file

@ -12,12 +12,10 @@ WORKDIR /app
COPY pyproject.toml uv.lock ./
COPY README.md ./
COPY src ./src
# Install only the prescreen group (core + db/mq/s3/obs + regex engine).
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-default-groups --group prescreen --no-install-project && \
uv pip install --no-deps .
uv sync --frozen --no-default-groups --group prescreen --no-install-project
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
FROM python:3.13-slim
@ -30,5 +28,8 @@ WORKDIR /app
COPY --from=builder /app/.venv /app/.venv
# App source: internal imports use the absolute `src.contract_check.*` form.
COPY src ./src
EXPOSE 9104
CMD ["python", "-m", "contract_check.worker_prescreen"]
CMD ["python", "-m", "src.contract_check.worker_prescreen"]