Fix absolute path.
This commit is contained in:
parent
afe1aebf9d
commit
622745487e
10 changed files with 42 additions and 34 deletions
2
Makefile
2
Makefile
|
|
@ -161,7 +161,7 @@ admin-list: ## List current admin users
|
||||||
# Auth / tokens
|
# Auth / tokens
|
||||||
# ─────────────────────────────────────────────────────────────────────────────
|
# ─────────────────────────────────────────────────────────────────────────────
|
||||||
seed-token: ## Generate bot service token (prints bearer token)
|
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
|
jwt-secret: ## Generate a fresh JWT_SECRET for .env
|
||||||
@openssl rand -hex 32
|
@openssl rand -hex 32
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,7 @@ def main() -> None:
|
||||||
args = sys.argv[1:]
|
args = sys.argv[1:]
|
||||||
if args and args[0] == "seed-token":
|
if args and args[0] == "seed-token":
|
||||||
if len(args) not in (3, 4):
|
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)
|
sys.exit(1)
|
||||||
_, name, adapter, *provided = args
|
_, name, adapter, *provided = args
|
||||||
asyncio.run(_seed_token(name, adapter, provided[0] if provided else None))
|
asyncio.run(_seed_token(name, adapter, provided[0] if provided else None))
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,10 @@ COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY alembic.ini ./
|
COPY alembic.ini ./
|
||||||
COPY migrations ./migrations
|
COPY migrations ./migrations
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the api group (core + db/mq/s3/obs + fastapi/uvicorn).
|
# Install only the api group (core + db/mq/s3/obs + fastapi/uvicorn).
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group api --no-install-project && \
|
uv sync --frozen --no-default-groups --group api --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -31,8 +29,11 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
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 alembic.ini ./
|
||||||
COPY migrations ./migrations
|
COPY migrations ./migrations
|
||||||
|
|
||||||
EXPOSE 8000 9100
|
EXPOSE 8000 9100
|
||||||
CMD ["python", "-m", "contract_check.api"]
|
CMD ["python", "-m", "src.contract_check.api"]
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the bot group (core + aiogram). No DB/MQ/S3/LLM/OCR drivers —
|
# 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.
|
# this is the leanest service image; it speaks HTTP to the api exclusively.
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group bot --no-install-project && \
|
uv sync --frozen --no-default-groups --group bot --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -31,4 +29,7 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
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"]
|
||||||
|
|
|
||||||
|
|
@ -14,12 +14,10 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the prototype group (core + pymupdf/python-docx).
|
# Install only the prototype group (core + pymupdf/python-docx).
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group prototype --no-install-project && \
|
uv sync --frozen --no-default-groups --group prototype --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -32,4 +30,7 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
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"]
|
||||||
|
|
|
||||||
|
|
@ -12,13 +12,11 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the analyze group (core + db/mq/s3/obs + otel-httpx). No
|
# Install only the analyze group (core + db/mq/s3/obs + otel-httpx). No
|
||||||
# tesseract/pymupdf — this image is the leanest LLM/I/O worker.
|
# tesseract/pymupdf — this image is the leanest LLM/I/O worker.
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group analyze --no-install-project && \
|
uv sync --frozen --no-default-groups --group analyze --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -31,5 +29,8 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
COPY --from=builder /app/.venv /app/.venv
|
||||||
|
|
||||||
|
# App source: internal imports use the absolute `src.contract_check.*` form.
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
EXPOSE 9102
|
EXPOSE 9102
|
||||||
CMD ["python", "-m", "contract_check.worker_analyze"]
|
CMD ["python", "-m", "src.contract_check.worker_analyze"]
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,9 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group billing --no-install-project && \
|
uv sync --frozen --no-default-groups --group billing --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -29,5 +27,8 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
COPY --from=builder /app/.venv /app/.venv
|
||||||
|
|
||||||
|
# App source: internal imports use the absolute `src.contract_check.*` form.
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
EXPOSE 9105
|
EXPOSE 9105
|
||||||
CMD ["python", "-m", "contract_check.worker_billing"]
|
CMD ["python", "-m", "src.contract_check.worker_billing"]
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,10 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the extract group (core + db/mq/s3/obs + pymupdf/tesseract).
|
# Install only the extract group (core + db/mq/s3/obs + pymupdf/tesseract).
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group extract --no-install-project && \
|
uv sync --frozen --no-default-groups --group extract --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: runtime with tesseract-ocr + language packs ────────────────────
|
# ─── Stage 2: runtime with tesseract-ocr + language packs ────────────────────
|
||||||
FROM python:3.13-slim
|
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
|
COPY --from=builder /app/.venv /app/.venv
|
||||||
|
|
||||||
|
# App source: internal imports use the absolute `src.contract_check.*` form.
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
EXPOSE 9101
|
EXPOSE 9101
|
||||||
CMD ["python", "-m", "contract_check.worker_extract"]
|
CMD ["python", "-m", "src.contract_check.worker_extract"]
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,10 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the notify group (core + db/mq/obs + aiosmtplib).
|
# Install only the notify group (core + db/mq/obs + aiosmtplib).
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group notify --no-install-project && \
|
uv sync --frozen --no-default-groups --group notify --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -30,5 +28,8 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
COPY --from=builder /app/.venv /app/.venv
|
||||||
|
|
||||||
|
# App source: internal imports use the absolute `src.contract_check.*` form.
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
EXPOSE 9103
|
EXPOSE 9103
|
||||||
CMD ["python", "-m", "contract_check.worker_notify"]
|
CMD ["python", "-m", "src.contract_check.worker_notify"]
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,10 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY pyproject.toml uv.lock ./
|
COPY pyproject.toml uv.lock ./
|
||||||
COPY README.md ./
|
COPY README.md ./
|
||||||
COPY src ./src
|
|
||||||
|
|
||||||
# Install only the prescreen group (core + db/mq/s3/obs + regex engine).
|
# Install only the prescreen group (core + db/mq/s3/obs + regex engine).
|
||||||
RUN --mount=type=cache,target=/root/.cache/uv \
|
RUN --mount=type=cache,target=/root/.cache/uv \
|
||||||
uv sync --frozen --no-default-groups --group prescreen --no-install-project && \
|
uv sync --frozen --no-default-groups --group prescreen --no-install-project
|
||||||
uv pip install --no-deps .
|
|
||||||
|
|
||||||
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
# ─── Stage 2: lean runtime ─────────────────────────────────────────────────
|
||||||
FROM python:3.13-slim
|
FROM python:3.13-slim
|
||||||
|
|
@ -30,5 +28,8 @@ WORKDIR /app
|
||||||
|
|
||||||
COPY --from=builder /app/.venv /app/.venv
|
COPY --from=builder /app/.venv /app/.venv
|
||||||
|
|
||||||
|
# App source: internal imports use the absolute `src.contract_check.*` form.
|
||||||
|
COPY src ./src
|
||||||
|
|
||||||
EXPOSE 9104
|
EXPOSE 9104
|
||||||
CMD ["python", "-m", "contract_check.worker_prescreen"]
|
CMD ["python", "-m", "src.contract_check.worker_prescreen"]
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue