# tgit-uploads Общий репозиторий команды [tgit](https://gitea.24studbank.ru/HSE/tgit): бот коммитит сюда изменения из Telegram (раздел «📝 Коммит»), каждый push в `main` запускает CI, а изменённые сервисы разворачиваются на хосте (CD). ## Структура ``` services// сервис = папка; имя — ^[a-z][a-z0-9-]{1,30}$ main.py точка входа (python main.py) requirements.txt зависимости (необязательно) test_*.py тесты pytest (необязательно, запускаются в CI) tgit.yaml настройки запуска: health_url, network (необязательно) .gitea/workflows/ CI (Gitea Actions) — из Telegram не редактируется .sourcecraft/ci.yaml CI для SourceCraft — на будущее возвращение, сейчас не используется .tgit/ служебные скрипты CI — из Telegram не редактируются ruff.toml мягкий набор правил линтера ``` ## CI/CD (push в `main`) CI — workflow `check` в Gitea Actions; CD делает бот, когда `check` зелёный. | Шаг | Что делает | Падает, если | |---|---|---| | `compile` | `python -m compileall` | синтаксическая ошибка | | `lint` | `ruff check` (мягкие правила) | неопределённые имена, неиспользуемые импорты, опасные значения по умолчанию | | `security` | `bandit -ll` по `services/` | найдена уязвимость уровня medium+ | | `tests` | `pytest` для каждого сервиса с тестами, со своими `requirements.txt` | упал тест | | CD (бот) | изменённые сервисы → `tgit-runner` на хосте | сервис не поднялся (healthy) за 60 с — работает прежняя версия | ## Развернуть заново Шаблон — в репозитории бота: `infra/uploads-template/`. Новый пустой репозиторий → скопировать содержимое шаблона → push в `main` → в настройках добавить deploy key бота с правом записи.