infra: репозиторий tgit-uploads, deploy-ключ бота и CI/CD-шаблон #7

Open
opened 2026-10-12 19:33:04 +03:00 by Eleboba · 0 comments
Owner

Описание

Общий репозиторий команды (ADR-012) по ARCHITECTURE §5.2. Шаблон хранится в tgit, чтобы его можно было развернуть заново.

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

  • Создан rogachevegorushka/tgit-uploads (SourceCraft) с services/, README и .sourcecraft/ci.yaml.
  • У бота свой SSH deploy key с записью только в tgit-uploads.
  • Workflow check на push в main: изменённые файлы → py_compile, ruff (мягкие правила), pytest для затронутых сервисов, bandit.
  • Workflow deploy (после check) — вызов runner для изменённых services/<name>/ (сам runner — #13).
  • Формат services/<name>/tgit.yaml (health_url, network) описан в README.

Подзадачи

  • infra/uploads-template/ — README, .sourcecraft/ci.yaml, ruff.toml
  • Скрипт изменённых файлов/сервисов
  • Ключ tgit_bot_ed25519, путь в .env.example
  • Добавить публичный ключ бота как deploy key с правом записи в tgit-uploads (вручную в UI SourceCraft — API для ключей нет)
  • Пример сервиса services/hello/

Анализ

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

Файл Что меняется
infra/uploads-template/ новый
.env.example GIT_* переменные

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

Приватный ключ — только в .env/volume. Workflow deploy до #13 — заглушка, которая логирует список сервисов.

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

Закоммитить вручную сервис с ошибкой ruff и без — check красный/зелёный, в логе виден упавший шаг; deploy перечисляет изменённые сервисы.


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

2026-10-13

  • Задача переписана под SPEC v2 (QR-доступ, меню из 4 разделов, командная модель — ADR-011…013).

2026-10-13

  • Репозиторий rogachevegorushka/tgit-uploads создан через API (POST /orgs/{org}/repos), приватный, основная ветка main.
  • Шаблон infra/uploads-template/: .sourcecraft/ci.yaml (push в main → check: compile · ruff (мягкие правила) · bandit -ll · pytest по сервисам → deploy: список изменённых сервисов, запуск — #13), .tgit/changed_services.py, .tgit/run_tests.py, ruff.toml, демо-сервис services/hello с тестом, формат tgit.yaml, README.
  • check проверяет весь репозиторий (он маленький, а результат не зависит от глубины клона); список для deploy — git diff HEAD~1 с фолбэком «все сервисы».
  • Шаблон залит первым коммитом 0581aef → CI запустился сам (event_type: push), прогон 1000000 ✅: тест hello прошёл, deploy-заглушка вывела hello. Подтверждает: триггеры берутся из основной ветки (см. #6).
  • Красная проба (временная ветка, удалена): сервис с неопределённым именем → lint ❌ (F821, F401), deploy не запускался.
  • Ключ бота ~/.ssh/tgit_bot_ed25519 (ed25519) сгенерирован локально, путь — GIT_SSH_KEY_PATH. Осталось: добавить его публичную часть как deploy key с записью в UI SourceCraft.

2026-10-14

  • Deploy key добавлен владельцем. Проверено ключом бота (IdentitiesOnly): ls-remote ✅, push временной ветки ✅ (удалена). PR #30 смержен.

2026-10-15

  • ⚠️ Проверка 2026-10-14 была ложноположительной. В ~/.ssh/config для ssh.sourcecraft.dev прописан личный ключ владельца (manytasks); ssh предлагал его вместе с ключом бота, и сервер принимал личный (ssh -v: Server accepts key: …/manytasks). С -F /dev/null (только ключ бота) — Permission denied (publickey); в контейнере то же самое.
  • Ключ бота SourceCraft не знает: нужно проверить, куда он добавлен (deploy key репозитория tgit-uploads с правом записи), и добавить заново. Отпечаток: SHA256:Kj73RhqKq+FSsjf7qnR/zV25yvz1b091yt8lKQpXzho.
  • Защита от повторения: бот вызывает ssh с -F /dev/null (#8) — на хосте и в контейнере ведёт себя одинаково. Проверять ключ только так.
## Описание Общий репозиторий команды (ADR-012) по [ARCHITECTURE](https://gitea.24studbank.ru/HSE/tgit/src/branch/dev/docs/ARCHITECTURE.md) §5.2. Шаблон хранится в `tgit`, чтобы его можно было развернуть заново. ## Желаемый результат - Создан `rogachevegorushka/tgit-uploads` (SourceCraft) с `services/`, README и `.sourcecraft/ci.yaml`. - У бота свой SSH deploy key с записью только в `tgit-uploads`. - Workflow `check` на push в `main`: изменённые файлы → `py_compile`, `ruff` (мягкие правила), `pytest` для затронутых сервисов, `bandit`. - Workflow `deploy` (после `check`) — вызов runner для изменённых `services/<name>/` (сам runner — #13). - Формат `services/<name>/tgit.yaml` (`health_url`, `network`) описан в README. ## Подзадачи - [x] `infra/uploads-template/` — README, `.sourcecraft/ci.yaml`, `ruff.toml` - [x] Скрипт изменённых файлов/сервисов - [x] Ключ `tgit_bot_ed25519`, путь в `.env.example` - [ ] Добавить публичный ключ бота как deploy key с правом записи в `tgit-uploads` (вручную в UI SourceCraft — API для ключей нет) - [x] Пример сервиса `services/hello/` ## Анализ ### Затрагиваемые файлы | Файл | Что меняется | |------|--------------| | `infra/uploads-template/` | новый | | `.env.example` | GIT_* переменные | ### Ограничения и риски Приватный ключ — только в `.env`/volume. Workflow `deploy` до #13 — заглушка, которая логирует список сервисов. ## Как проверить Закоммитить вручную сервис с ошибкой ruff и без — `check` красный/зелёный, в логе виден упавший шаг; `deploy` перечисляет изменённые сервисы. --- ## Лог выполнения ### 2026-10-13 - Задача переписана под SPEC v2 (QR-доступ, меню из 4 разделов, командная модель — ADR-011…013). ### 2026-10-13 - Репозиторий `rogachevegorushka/tgit-uploads` создан через API (`POST /orgs/{org}/repos`), **приватный**, основная ветка `main`. - Шаблон `infra/uploads-template/`: `.sourcecraft/ci.yaml` (push в `main` → `check`: compile · ruff (мягкие правила) · bandit -ll · pytest по сервисам → `deploy`: список изменённых сервисов, запуск — #13), `.tgit/changed_services.py`, `.tgit/run_tests.py`, `ruff.toml`, демо-сервис `services/hello` с тестом, формат `tgit.yaml`, README. - `check` проверяет весь репозиторий (он маленький, а результат не зависит от глубины клона); список для `deploy` — `git diff HEAD~1` с фолбэком «все сервисы». - Шаблон залит первым коммитом `0581aef` → CI запустился **сам** (`event_type: push`), прогон `1000000` ✅: тест `hello` прошёл, deploy-заглушка вывела `hello`. Подтверждает: триггеры берутся из основной ветки (см. #6). - Красная проба (временная ветка, удалена): сервис с неопределённым именем → `lint` ❌ (F821, F401), `deploy` не запускался. - Ключ бота `~/.ssh/tgit_bot_ed25519` (ed25519) сгенерирован локально, путь — `GIT_SSH_KEY_PATH`. **Осталось:** добавить его публичную часть как deploy key с записью в UI SourceCraft. ### 2026-10-14 - Deploy key добавлен владельцем. Проверено ключом бота (`IdentitiesOnly`): `ls-remote` ✅, push временной ветки ✅ (удалена). PR #30 смержен. ### 2026-10-15 - ⚠️ **Проверка 2026-10-14 была ложноположительной.** В `~/.ssh/config` для `ssh.sourcecraft.dev` прописан личный ключ владельца (`manytasks`); ssh предлагал его вместе с ключом бота, и сервер принимал **личный** (`ssh -v`: `Server accepts key: …/manytasks`). С `-F /dev/null` (только ключ бота) — `Permission denied (publickey)`; в контейнере то же самое. - Ключ бота SourceCraft не знает: нужно проверить, куда он добавлен (deploy key репозитория `tgit-uploads` с правом записи), и добавить заново. Отпечаток: `SHA256:Kj73RhqKq+FSsjf7qnR/zV25yvz1b091yt8lKQpXzho`. - Защита от повторения: бот вызывает ssh с `-F /dev/null` (#8) — на хосте и в контейнере ведёт себя одинаково. Проверять ключ только так.
Eleboba added this to the M1 · MVP: загрузка → коммит → CI milestone 2026-10-12 19:33:04 +03:00
Eleboba added the infrafeaturesize/1 labels 2026-10-12 19:33:04 +03:00
Eleboba self-assigned this 2026-10-12 19:33:04 +03:00
Eleboba changed title from infra: репозиторий tgit-uploads, deploy-ключ бота и CI-проверки загрузок to infra: репозиторий tgit-uploads, deploy-ключ бота и CI/CD-шаблон 2026-10-13 22:52:43 +03:00
Eleboba reopened this issue 2026-10-15 19:10:01 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: HSE/tgit#7