[devops] Каркас: uv-проект, docker-compose, Makefile, CI #1

Closed
opened 2026-10-03 14:38:52 +03:00 by Eleboba · 0 comments
Owner

Описание

Пустой репозиторий. Нужен скелет, на который лягут все зоны. ADR-003 (один Postgres, две БД, без Redis/Alembic), ADR-004 (офлайн по умолчанию), ADR-008 (config/).

Желаемый результат

  • pyproject.toml (uv, Python 3.11+): fastapi, uvicorn, sqlalchemy[asyncio], asyncpg, pydantic-settings, pyyaml, aiogram 3, gigachat, apscheduler, streamlit, plotly, httpx; dev: ruff, pytest, pytest-asyncio.
  • Пустые пакеты: app/{core,dialog,channels,llm,db,api,scheduler,integrations}/, dashboard/, config/, data/, scripts/, tests/.
  • app/config.py — Settings(BaseSettings): DB-URL обеих БД, PSEUDO_KEY, LLM_PROVIDER=mock|gigachat, GIGACHAT_*, TG_BOT_TOKEN (опц.), DEMO_CLOCK=true, TZ.
  • docker-compose.yml: postgres (init-скрипт создаёт БД identity и clinical и две роли; clinical-роль без прав на identity), app (FastAPI :8000 + шедулер + бот, если задан токен), dashboard (Streamlit :8501). Работает без интернета после сборки.
  • Makefile: up, down, seed, lint (ruff), test (pytest), demo-reset.
  • .env.example по SPEC §15 + LLM_PROVIDER, DEMO_CLOCK.
  • .gitea/workflows/ci.yml: ruff + pytest на PR в dev/main.

Подзадачи

  • pyproject + uv.lock
  • структура пакетов + app/config.py
  • Dockerfile (один образ для app и dashboard), compose, init SQL
  • Makefile, .env.example
  • CI workflow

Как проверить

cp .env.example .env && make up → curl localhost:8000/health = 200, localhost:8501 открывается; make lint test зелёные (пустой smoke-тест).


Лог выполнения

2026-10-03

  • Что сделано: uv-проект (Python 3.12, requires-python >=3.11,<3.14), структура пакетов app/{core,dialog,channels,llm,db,api,scheduler,integrations}, app/config.py (единственное место чтения env, env_ignore_empty), FastAPI /health, заглушка Streamlit, Dockerfile (один образ на app и dashboard), compose: postgres с двумя БД identity/clinical и раздельными ролями (REVOKE CONNECT FROM PUBLIC), Makefile, .env.example, CI .gitea/workflows/ci.yml.
  • Результат: make lint test зелёные; docker compose up → /health 200, дашборд 200; clinical_app к базе identity не подключается («no CONNECT privilege»).
  • Заметка: ruff исключает docs/ (иначе форматирует python-блоки в markdown).
## Описание Пустой репозиторий. Нужен скелет, на который лягут все зоны. ADR-003 (один Postgres, две БД, без Redis/Alembic), ADR-004 (офлайн по умолчанию), ADR-008 (`config/`). ## Желаемый результат - `pyproject.toml` (uv, Python 3.11+): fastapi, uvicorn, sqlalchemy[asyncio], asyncpg, pydantic-settings, pyyaml, aiogram 3, gigachat, apscheduler, streamlit, plotly, httpx; dev: ruff, pytest, pytest-asyncio. - Пустые пакеты: `app/{core,dialog,channels,llm,db,api,scheduler,integrations}/`, `dashboard/`, `config/`, `data/`, `scripts/`, `tests/`. - `app/config.py` — `Settings(BaseSettings)`: DB-URL обеих БД, `PSEUDO_KEY`, `LLM_PROVIDER=mock|gigachat`, `GIGACHAT_*`, `TG_BOT_TOKEN` (опц.), `DEMO_CLOCK=true`, `TZ`. - `docker-compose.yml`: `postgres` (init-скрипт создаёт БД `identity` и `clinical` и две роли; clinical-роль без прав на identity), `app` (FastAPI :8000 + шедулер + бот, если задан токен), `dashboard` (Streamlit :8501). Работает без интернета после сборки. - `Makefile`: `up`, `down`, `seed`, `lint` (ruff), `test` (pytest), `demo-reset`. - `.env.example` по SPEC §15 + `LLM_PROVIDER`, `DEMO_CLOCK`. - `.gitea/workflows/ci.yml`: ruff + pytest на PR в dev/main. ## Подзадачи - [ ] pyproject + uv.lock - [ ] структура пакетов + `app/config.py` - [ ] Dockerfile (один образ для app и dashboard), compose, init SQL - [ ] Makefile, .env.example - [ ] CI workflow ## Как проверить `cp .env.example .env && make up` → `curl localhost:8000/health` = 200, `localhost:8501` открывается; `make lint test` зелёные (пустой smoke-тест). --- ## Лог выполнения ### 2026-10-03 - **Что сделано:** uv-проект (Python 3.12, `requires-python >=3.11,<3.14`), структура пакетов `app/{core,dialog,channels,llm,db,api,scheduler,integrations}`, `app/config.py` (единственное место чтения env, `env_ignore_empty`), FastAPI `/health`, заглушка Streamlit, Dockerfile (один образ на app и dashboard), compose: postgres с двумя БД `identity`/`clinical` и раздельными ролями (`REVOKE CONNECT FROM PUBLIC`), Makefile, `.env.example`, CI `.gitea/workflows/ci.yml`. - **Результат:** `make lint test` зелёные; `docker compose up` → `/health` 200, дашборд 200; `clinical_app` к базе `identity` не подключается («no CONNECT privilege»). - **Заметка:** ruff исключает `docs/` (иначе форматирует python-блоки в markdown).
Eleboba added this to the M1 Каркас milestone 2026-10-03 14:38:52 +03:00
Eleboba added the devopschoresize/1P0 labels 2026-10-03 14:38:52 +03:00
Eleboba self-assigned this 2026-10-03 14:38:52 +03:00
Eleboba added a new dependency 2026-10-03 14:38:58 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: MedITron/PTSRaiAgent#1