- admin-owner-from-config первой строкой: сервис заводит владельца панели по ключу конфига; задача отменяет требование спеки storage, и это названо в рамках - dev-run-task следом: task dev поднимает сервис и заглушку разом, гасит оба по Ctrl+C; зависит от ключа конфига
52 lines
3.9 KiB
Markdown
52 lines
3.9 KiB
Markdown
# 🧹 Поднимать сервис и заглушку одной командой
|
||
|
||
- **Тип:** chore
|
||
- **Категория:** Очередь — шаг dev заводит владельца панели тем самым ключом — до него команду не собрать
|
||
- **Зачем:** Локальная проверка требует двух терминалов, ручной остановки обоих процессов и чистки каталога данных; учётную запись заводят проходом по браузеру.
|
||
|
||
Шаг `task dev CONFIG=<путь> USER=<почта>` поднимает сервис и подставной
|
||
провайдер OIDC разом, кладёт данные во временный каталог, заводит учётные записи
|
||
и гасит оба процесса по Ctrl+C.
|
||
|
||
Задуманное устройство:
|
||
|
||
- конфиг пишет человек и передаёт путём — шаг его не сочиняет;
|
||
- шаг подменяет каталог данных: кладёт копию переданного конфига во временный
|
||
каталог со своим `data_dir`, чтобы прогон начинался с пустой базы независимо от
|
||
того, что написано в конфиге. Временное живёт в `/tmp` — в `data/` писать
|
||
запрещено (CLAUDE.md, «Запреты»);
|
||
- оба процесса идут одной группой, `trap` на `INT` и `TERM` гасит их разом,
|
||
`wait` держит терминал;
|
||
- шаг заводит обычную учётную запись входом: поднимает `cmd/oidcstub` с
|
||
`-email` из `USER`, сам проходит цепочку входа и тем создаёт запись;
|
||
- владельца панели заводит **ключ конфига**, который приносит
|
||
[admin-owner-from-config](admin-owner-from-config.md). До неё шаг владельца
|
||
панели завести не может — отсюда и место в списке.
|
||
|
||
## Затрагивает
|
||
|
||
- `Taskfile.yml` — шаг `dev` с переменными `CONFIG` и `USER`;
|
||
- скрипт запуска в `scripts/` — он попадает под шаг `shell` гейта;
|
||
- `CLAUDE.md`, раздел «Команды»;
|
||
- `README.md`, раздел про локальный запуск.
|
||
|
||
## Критерии приёмки
|
||
|
||
- Команда поднимает оба процесса и печатает адрес, по которому открывать
|
||
приложение. Оракул: прогон с тестовым конфигом — сервис и заглушка слушают свои
|
||
порты.
|
||
- Ctrl+C гасит обоих и не оставляет висящих процессов. Оракул: `pgrep` по обоим
|
||
именам после остановки — пусто.
|
||
- После запуска в базе есть учётная запись с переданной почтой. Оракул: запрос к
|
||
коллекции пользователей во временной базе.
|
||
- Каталог данных лежит во временном месте, а `data/` не тронут. Оракул: путь базы
|
||
из журнала подъёма и `git status` после прогона.
|
||
- `task gate` остаётся зелёным, скрипт проходит `shellcheck`. Оракул: прогон
|
||
гейта целиком.
|
||
|
||
## Рамки
|
||
|
||
Шаг локальный: наружу не ходит, боевых ключей не требует и в образ не попадает.
|
||
Распознавание при выдуманных ключах не работает — это остаётся как есть, шаг его
|
||
не подменяет.
|