From f2e062c97229d05d6c7c7bc86e5d276f1d134bef Mon Sep 17 00:00:00 2001 From: Stream Date: Fri, 5 Jun 2026 07:40:01 +0300 Subject: [PATCH] auto-sync: 2026-06-05 07:40:01 --- memory/2026-06-05.md | 9 +- .../dev-2026-06-05-orch31-staging-infra.md | 91 +++++++++++++++++++ 2 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 tasks/orchestrator/reports/dev-2026-06-05-orch31-staging-infra.md diff --git a/memory/2026-06-05.md b/memory/2026-06-05.md index 96aa1d3..aa6196c 100644 --- a/memory/2026-06-05.md +++ b/memory/2026-06-05.md @@ -19,10 +19,11 @@ - В ПОЛНОМ прогоне `pytest tests/` секрет протекал между файлами → HMAC включался → webhook-тесты ловили `assert 401 == 200`. По отдельности файл зелёный, вместе — красный. - **Решение-паттерн:** autouse-фикстура в conftest, сброс протекающего состояния синглтона через monkeypatch перед каждым тестом. НЕ менять сам механизм/защищённые тесты — только навести порядок с изоляцией. `db_path` тоже протекал (get_task_by_repo_branch возвращал stale) — Dev законно добавил и его сброс. -### Развилка по мержу (ждёт кивка Славы на момент флаша) -- **#27** содержит ВСЁ (workflow + все фиксы тестов), зелёный. -- **#26** (ветка `ci/add-gitea-workflow`, только workflow) — поглощён #27. -- **План:** мержить #27 в main, #26 закрыть без мержа как поглощённый. Мерж PR — роль Стрим (ревьюер). +### Мерж ВЫПОЛНЕН ✅ (05.06, Слава дал «да») +- **PR #27 → MERGED в main** (HTTP 200). main HEAD = `d0a3424` Merge PR #27. Все 3 коммита фиксов в истории main. +- **PR #26 → CLOSED без мержа** (поглощён #27). +- Нюанс: CI на самом main после merge-commit отдельным прогоном не появился (workflow триггерится на push/PR-ветки; merge-commit мог не дёрнуть). Код в main = ровно то, что прогонялось зелёным (294 passed). Гейт на будущих PR работает. +- **Пункт №1 self-hosting (CI-гейт) ЗАКРЫТ.** Осталось: удалить отработанные ветки fix/isolate, ci/add (косметика). ## Staging-среда для orchestrator (ORCH-30..35) — дизайн оформлен, задачи в Backlog diff --git a/tasks/orchestrator/reports/dev-2026-06-05-orch31-staging-infra.md b/tasks/orchestrator/reports/dev-2026-06-05-orch31-staging-infra.md new file mode 100644 index 0000000..5dab470 --- /dev/null +++ b/tasks/orchestrator/reports/dev-2026-06-05-orch31-staging-infra.md @@ -0,0 +1,91 @@ +# Dev Report: ORCH-31 Staging-инфраструктура (порт 8501, изолированная БД) +Дата: 2026-06-05 +Статус: DONE + +## Задача +Добавить compose-service `orchestrator-staging` под профилем `staging`, `.env.staging.example`, обновить `.gitignore`, создать `docs/STAGING.md`. Ветка `feature/ORCH-31-staging-infra` из свежего origin/main. Только инфра-обвязка (ORCH-31, этап 1 из 5). + +## Сделано +- [x] Подключён к серверу, изучен текущий docker-compose.yml (факты совпали с ТЗ) +- [x] Создана ветка `feature/ORCH-31-staging-infra` из свежего origin/main (d0a3424) +- [x] Добавлен service `orchestrator-staging` в docker-compose.yml под профилем `staging` +- [x] Создан `.env.staging.example` со всеми ключами и комментариями +- [x] Обновлён `.gitignore`: добавлены `.env.staging` и `data/staging/` +- [x] Создан `docs/STAGING.md`: как поднять, архитектура, роадмап +- [x] Проверен `docker compose config` (без профиля — staging НЕ виден) +- [x] Проверен `docker compose --profile staging config` (staging виден под профилем) +- [x] Коммит `6c1e5ff` + push + PR #28 создан + +## Изменённые файлы +- `docker-compose.yml` — добавлен service `orchestrator-staging` (profiles: [staging], port 8501, volume ./data/staging, command override) +- `.gitignore` — добавлены `.env.staging` и `data/staging/` +- `.env.staging.example` — новый файл, шаблон с ключами и плейсхолдерами +- `docs/STAGING.md` — новый файл, документация по staging + +## Результат + +### Ветка +`feature/ORCH-31-staging-infra` + +### Коммит +`6c1e5fff5291297f6ab1573b144390f36b135cbe` +`feat(staging): add isolated orchestrator-staging service (port 8501, separate DB)` + +### PR +**#28** — https://git.mva154.duckdns.org/admin/orchestrator/pulls/28 + +--- + +### Пруф 1: docker compose config (без профиля) — staging НЕ поднимается +``` +services: + orchestrator: ← только прод, staging отсутствует ✅ +``` + +### Пруф 2: docker compose --profile staging config — staging виден +``` +services: + orchestrator: + orchestrator-staging: ← виден под профилем staging ✅ + profiles: + - staging + command: + - uvicorn + - src.main:app + - --host + - 0.0.0.0 + - --port + - "8501" ← порт 8501 ✅ + volumes: + source: /home/slin/repos/orchestrator/data/staging ← изолированная БД ✅ +``` + +### Пруф 3: git log origin/main..origin/feature/ORCH-31-staging-infra +``` +6c1e5ff feat(staging): add isolated orchestrator-staging service (port 8501, separate DB) +``` +✅ Один коммит поверх main, после push. + +--- + +## Архитектура решения + +| | Production | Staging | +|---|---|---| +| Port | 8500 | 8501 | +| Container | `orchestrator` | `orchestrator-staging` | +| DB (host) | `./data/orchestrator.db` | `./data/staging/orchestrator.db` | +| DB (container) | `/app/data/orchestrator.db` | `/app/data/orchestrator.db` | +| env file | `.env` | `.env.staging` | +| Profile | *(default)* | `staging` | + +Изоляция БД достигается через отдельный volume mount `./data/staging:/app/data`, а не изменением `ORCH_DB_PATH`. + +## Проблемы и решения + +1. **Нет `.env.staging` для `docker compose config --profile staging`** — ожидаемо (файл создаётся при выкате, не коммитится). Для проверки использован временный `.env.staging` с placeholder-значениями, сразу удалён. В репо не закоммичен. + +2. **Bash heredoc + backticks** в SSH-команде для JSON тела PR — экранирование конфликтовало. Решено через Python-скрипт (`/tmp/pr_payload.json`). + +## Следующий шаг (ORCH-32) +Создать изолированный Plane-проект и Gitea-репозиторий для staging, настроить webhook для staging-инстанса (порт 8501).