infra: каркас проекта — uv, линтеры, тесты, Docker Compose #3

Closed
opened 2026-10-12 19:32:20 +03:00 by Eleboba · 0 comments
Owner

Описание

Основа репозитория по ARCHITECTURE §7 и «Требованиям к оформлению» (отдельные каталоги кода, тестов, конфигов, инфраструктуры). Стек — ADR-009.

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

  • make install / lint / fmt / test / up / down / logs работают на чистой машине.
  • make up поднимает bot (пока заглушка) и postgres в Compose.
  • make lint (ruff check + ruff format --check + mypy) и make test зелёные на пустом проекте.

Подзадачи

  • pyproject.toml: Python 3.12, зависимости ADR-009, настройки ruff/mypy (strict для app/)/pytest/coverage
  • Каталоги app/ config/ infra/ examples/ tests/ с __init__.py/README-заглушками
  • Makefile с целями выше
  • Dockerfile (multi-stage, uv, non-root), docker-compose.yml (bot + postgres 16, healthcheck, лимиты памяти)
  • .env.example со всеми переменными и комментариями
  • .dockerignore, .python-version, обновить .gitignore

Анализ

Затрагиваемые файлы

Файл Что меняется
pyproject.toml новый
Makefile новый
Dockerfile новый
docker-compose.yml новый
.env.example новый

Ограничения и риски

Лимиты памяти в Compose — из бюджета ARCHITECTURE §6 (бот ≤ 256 МБ, postgres ≤ 256 МБ). uv.lock коммитим.

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

make install && make lint && make test && make up && docker compose ps — оба сервиса healthy/running.


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

Перенесено из SourceCraft: https://sourcecraft.dev/rogachevegorushka/tgit/issues/3

2026-10-13

  • Каркас: pyproject.toml (Python 3.12, ADR-009, ruff + mypy strict + pytest/coverage), app/ с заглушкой-точкой входа (graceful shutdown по SIGTERM), каталоги config/ infra/ examples/ tests/ с README, Makefile, Dockerfile, docker-compose.yml, .env.example, .dockerignore, uv.lock.
  • Dockerfile: multi-stage на uv, non-root uid 10001, в рантайме git + openssh-client (нужны #9).
  • Грабли: сборка висла на apt-get update — в локальной сети заблокирован обычный HTTP (даже example.com), HTTPS работает. Источники apt переключены на https:// — работает в любой сети.
  • Проверено: make lint (ruff, format, mypy strict) и make test зелёные; make up → postgres healthy, bot running от tgit; docker compose stop bot → «tgit stopped», exit 0 без таймаута; образ 311 МБ.
  • fail_under покрытия пока не задан — порог вводится в #6.
## Описание Основа репозитория по [ARCHITECTURE §7](docs/ARCHITECTURE.md) и «Требованиям к оформлению» (отдельные каталоги кода, тестов, конфигов, инфраструктуры). Стек — ADR-009. ## Желаемый результат - `make install / lint / fmt / test / up / down / logs` работают на чистой машине. - `make up` поднимает `bot` (пока заглушка) и `postgres` в Compose. - `make lint` (ruff check + ruff format --check + mypy) и `make test` зелёные на пустом проекте. ## Подзадачи - [x] `pyproject.toml`: Python 3.12, зависимости ADR-009, настройки ruff/mypy (strict для `app/`)/pytest/coverage - [x] Каталоги `app/ config/ infra/ examples/ tests/` с `__init__.py`/README-заглушками - [x] `Makefile` с целями выше - [x] `Dockerfile` (multi-stage, uv, non-root), `docker-compose.yml` (bot + postgres 16, healthcheck, лимиты памяти) - [x] `.env.example` со всеми переменными и комментариями - [x] `.dockerignore`, `.python-version`, обновить `.gitignore` ## Анализ ### Затрагиваемые файлы | Файл | Что меняется | |------|--------------| | `pyproject.toml` | новый | | `Makefile` | новый | | `Dockerfile` | новый | | `docker-compose.yml` | новый | | `.env.example` | новый | ### Ограничения и риски Лимиты памяти в Compose — из бюджета ARCHITECTURE §6 (бот ≤ 256 МБ, postgres ≤ 256 МБ). `uv.lock` коммитим. ## Как проверить `make install && make lint && make test && make up && docker compose ps` — оба сервиса `healthy`/`running`. --- ## Лог выполнения > Перенесено из SourceCraft: https://sourcecraft.dev/rogachevegorushka/tgit/issues/3 ### 2026-10-13 - Каркас: `pyproject.toml` (Python 3.12, ADR-009, ruff + mypy strict + pytest/coverage), `app/` с заглушкой-точкой входа (graceful shutdown по SIGTERM), каталоги `config/ infra/ examples/ tests/` с README, `Makefile`, `Dockerfile`, `docker-compose.yml`, `.env.example`, `.dockerignore`, `uv.lock`. - Dockerfile: multi-stage на uv, non-root `uid 10001`, в рантайме `git` + `openssh-client` (нужны #9). - **Грабли:** сборка висла на `apt-get update` — в локальной сети заблокирован обычный HTTP (даже `example.com`), HTTPS работает. Источники apt переключены на `https://` — работает в любой сети. - Проверено: `make lint` (ruff, format, mypy strict) и `make test` зелёные; `make up` → postgres `healthy`, bot `running` от `tgit`; `docker compose stop bot` → «tgit stopped», exit 0 без таймаута; образ 311 МБ. - `fail_under` покрытия пока не задан — порог вводится в #6.
Eleboba added this to the M1 · MVP: загрузка → коммит → CI milestone 2026-10-12 19:32:20 +03:00
Eleboba added the infrafeaturesize/1 labels 2026-10-12 19:32:20 +03:00
Eleboba self-assigned this 2026-10-12 19:32:20 +03:00
Sign in to join this conversation.