docs: add deploy and staging smoke runbook
This commit is contained in:
@@ -46,6 +46,7 @@ Crank - платформа для публикации внешних API в в
|
|||||||
- `docs/manual-regression-checklist.md` - post-integration regression baseline и ручной smoke checklist.
|
- `docs/manual-regression-checklist.md` - post-integration regression baseline и ручной smoke checklist.
|
||||||
- `docs/runtime-config.md` - конфигурация окружения.
|
- `docs/runtime-config.md` - конфигурация окружения.
|
||||||
- `docs/deployment.md` - деплой, reverse proxy и CI/CD.
|
- `docs/deployment.md` - деплой, reverse proxy и CI/CD.
|
||||||
|
- `docs/deploy-and-staging-smoke.md` - канонический post-deploy smoke pass для staging/production-like окружения.
|
||||||
- `docs/demo-runbook.md` - демонстрационный сценарий.
|
- `docs/demo-runbook.md` - демонстрационный сценарий.
|
||||||
- `docs/public-smoke-targets.md` - готовые публичные upstream-сервисы и payload-ы для smoke-проверки MCP.
|
- `docs/public-smoke-targets.md` - готовые публичные upstream-сервисы и payload-ы для smoke-проверки MCP.
|
||||||
- `docs/secrets-auth-plan.md` - целевая модель upstream secrets, auth profiles и пошаговый план реализации.
|
- `docs/secrets-auth-plan.md` - целевая модель upstream secrets, auth profiles и пошаговый план реализации.
|
||||||
|
|||||||
@@ -2,19 +2,18 @@
|
|||||||
|
|
||||||
## Current
|
## Current
|
||||||
|
|
||||||
### `feat/post-regression-fixes`
|
### `feat/deploy-and-staging-smoke`
|
||||||
|
|
||||||
Status: completed
|
Status: completed
|
||||||
|
|
||||||
DoD:
|
DoD:
|
||||||
- misleading non-functional UI actions are clearly marked or disabled
|
- deploy/staging smoke checklist exists
|
||||||
- login page no longer suggests working password-reset/SSO/request-access flows
|
- checklist covers server health, proxy routing, auth, UI pages, secrets, MCP, streaming
|
||||||
- settings planned capabilities look explicitly read-only and non-interactive
|
- deployment, demo and README docs link to the same smoke runbook
|
||||||
- node checks, UI docker build, affected Playwright specs and workspace check pass
|
|
||||||
|
|
||||||
## Next
|
## Next
|
||||||
|
|
||||||
- `feat/deploy-and-staging-smoke`
|
- `feat/staging-regression-notes`
|
||||||
|
|
||||||
## Backlog
|
## Backlog
|
||||||
|
|
||||||
|
|||||||
@@ -110,3 +110,9 @@ YAML roundtrip считается успешным, если:
|
|||||||
- `mcp-server` подхватывает published changes без restart;
|
- `mcp-server` подхватывает published changes без restart;
|
||||||
- ошибки `admin-api` и runtime возвращаются в читаемом виде;
|
- ошибки `admin-api` и runtime возвращаются в читаемом виде;
|
||||||
- логи позволяют понять, какая операция создавалась, тестировалась, публиковалась или импортировалась.
|
- логи позволяют понять, какая операция создавалась, тестировалась, публиковалась или импортировалась.
|
||||||
|
|
||||||
|
## 9. Post-deploy smoke
|
||||||
|
|
||||||
|
Если demo запускается не локально, а на staging/production-like стенде, после deploy нужно пройти отдельный checklist:
|
||||||
|
|
||||||
|
- [deploy-and-staging-smoke.md](/home/a.tolmachev/code/rust/mcpaas/docs/deploy-and-staging-smoke.md)
|
||||||
|
|||||||
@@ -0,0 +1,216 @@
|
|||||||
|
# Deploy And Staging Smoke
|
||||||
|
|
||||||
|
## 1. Назначение
|
||||||
|
|
||||||
|
Этот документ фиксирует обязательный post-deploy smoke pass для staging/production-like окружения.
|
||||||
|
|
||||||
|
Он нужен для двух задач:
|
||||||
|
|
||||||
|
- быстро проверить, что свежий deploy реально жив, а не просто "docker compose up -d завершился";
|
||||||
|
- дать следующему агенту и оператору один канонический сценарий проверки после релиза.
|
||||||
|
|
||||||
|
## 2. Когда использовать
|
||||||
|
|
||||||
|
Запускать после:
|
||||||
|
|
||||||
|
- merge в `main` и успешного `Deploy`;
|
||||||
|
- изменения `nginx`/routing;
|
||||||
|
- изменения auth/session;
|
||||||
|
- изменения `mcp-server`;
|
||||||
|
- изменения streaming/tool execution;
|
||||||
|
- изменения secrets/auth profiles;
|
||||||
|
- изменения UI routing и login flow.
|
||||||
|
|
||||||
|
## 3. Предусловия
|
||||||
|
|
||||||
|
Нужно иметь:
|
||||||
|
|
||||||
|
- задеплоенный стек `ui`, `admin-api`, `mcp-server`, `postgres`;
|
||||||
|
- корректный `.env` на сервере;
|
||||||
|
- валидный deploy через `.github/workflows/deploy.yml`;
|
||||||
|
- включенный `CRANK_DEMO_SEED=true`, если нужен предзаполненный smoke state;
|
||||||
|
- bootstrap admin credentials для входа в UI.
|
||||||
|
|
||||||
|
## 4. Server-side smoke
|
||||||
|
|
||||||
|
На сервере:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /opt/rmcp
|
||||||
|
docker compose ps
|
||||||
|
docker compose logs --tail=100 admin-api
|
||||||
|
docker compose logs --tail=100 mcp-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаемо:
|
||||||
|
|
||||||
|
- `admin-api` в `Up` / `healthy`;
|
||||||
|
- `mcp-server` в `Up` / `healthy`;
|
||||||
|
- нет циклических restart-ов;
|
||||||
|
- нет `NotPresent`, `password authentication failed`, `panic`, `invalid transition` и аналогичных fatal ошибок.
|
||||||
|
|
||||||
|
Проверка health endpoints:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl --fail --silent http://127.0.0.1:3001/health
|
||||||
|
curl --fail --silent http://127.0.0.1:3002/health
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Reverse proxy smoke
|
||||||
|
|
||||||
|
Проверить снаружи:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I https://<domain>/
|
||||||
|
curl -I https://<domain>/login
|
||||||
|
curl -I https://<domain>/agents
|
||||||
|
curl -I https://<domain>/secrets
|
||||||
|
curl -I https://<domain>/wizard/
|
||||||
|
curl -I https://<domain>/api/auth/session
|
||||||
|
curl -I https://<domain>/mcp/health
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаемо:
|
||||||
|
|
||||||
|
- `/`, `/login`, `/agents`, `/secrets`, `/wizard/` -> `200`;
|
||||||
|
- `/api/auth/session` -> `200` или `401` с JSON, но не HTML fallback;
|
||||||
|
- `/mcp/health` -> `200`;
|
||||||
|
- старые `/html/...` пути редиректят на clean routes.
|
||||||
|
|
||||||
|
Дополнительно проверить:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I https://<domain>/html/login.html
|
||||||
|
curl -I https://<domain>/html/agents.html
|
||||||
|
curl -I https://<domain>/html/wizard/
|
||||||
|
```
|
||||||
|
|
||||||
|
Ожидаемо:
|
||||||
|
|
||||||
|
- `302` на `/login`, `/agents`, `/wizard/`.
|
||||||
|
|
||||||
|
## 6. UI smoke
|
||||||
|
|
||||||
|
В браузере:
|
||||||
|
|
||||||
|
1. Открыть `/login`
|
||||||
|
2. Проверить:
|
||||||
|
- нет redirect loop;
|
||||||
|
- invalid login показывает ошибку;
|
||||||
|
- страница честно помечает password-only flow;
|
||||||
|
- `Forgot password`, `Google SSO`, `Request access` визуально disabled/planned.
|
||||||
|
3. Выполнить login.
|
||||||
|
4. Проверить navbar:
|
||||||
|
- workspace switch;
|
||||||
|
- user identity;
|
||||||
|
- clean routing без `/html/...`.
|
||||||
|
|
||||||
|
## 7. Core page smoke
|
||||||
|
|
||||||
|
После входа открыть и проверить:
|
||||||
|
|
||||||
|
- `/`
|
||||||
|
- `/agents`
|
||||||
|
- `/api-keys`
|
||||||
|
- `/secrets`
|
||||||
|
- `/logs`
|
||||||
|
- `/usage`
|
||||||
|
- `/workspace-setup`
|
||||||
|
- `/settings`
|
||||||
|
- `/stream-sessions`
|
||||||
|
- `/async-jobs`
|
||||||
|
- `/wizard/`
|
||||||
|
|
||||||
|
Для каждой страницы:
|
||||||
|
|
||||||
|
- данные грузятся;
|
||||||
|
- нет бесконечных spinners;
|
||||||
|
- нет console errors;
|
||||||
|
- empty/loading/error states выглядят корректно;
|
||||||
|
- language switch не ломает layout.
|
||||||
|
|
||||||
|
## 8. Auth and secrets smoke
|
||||||
|
|
||||||
|
Обязательная связка:
|
||||||
|
|
||||||
|
1. Открыть `/secrets`
|
||||||
|
2. Создать secret
|
||||||
|
3. Создать или выбрать auth profile
|
||||||
|
4. Открыть `/wizard/`
|
||||||
|
5. На шаге 2:
|
||||||
|
- выбрать existing auth profile;
|
||||||
|
- проверить quick-create secret;
|
||||||
|
- проверить quick-create auth profile;
|
||||||
|
6. Сохранить upstream
|
||||||
|
7. Выполнить `Test run`
|
||||||
|
|
||||||
|
Smoke считается успешным, если:
|
||||||
|
|
||||||
|
- wizard не требует `${secrets.*}`;
|
||||||
|
- `auth_profile_ref` реально доезжает до execution path;
|
||||||
|
- plaintext не возвращается после create/rotate.
|
||||||
|
|
||||||
|
## 9. MCP and protocol smoke
|
||||||
|
|
||||||
|
Использовать примеры из [public-smoke-targets.md](/home/a.tolmachev/code/rust/mcpaas/docs/public-smoke-targets.md).
|
||||||
|
|
||||||
|
Обязательные ручные кейсы:
|
||||||
|
|
||||||
|
- `REST` -> `Open-Meteo`
|
||||||
|
- `GraphQL` -> `Countries`
|
||||||
|
- `gRPC` -> `grpcb.in`
|
||||||
|
|
||||||
|
Порядок:
|
||||||
|
|
||||||
|
1. создать operation;
|
||||||
|
2. выполнить `Test run`;
|
||||||
|
3. publish;
|
||||||
|
4. привязать к agent;
|
||||||
|
5. проверить MCP path;
|
||||||
|
6. выполнить `tools/list` и `tools/call`.
|
||||||
|
|
||||||
|
## 10. Streaming smoke
|
||||||
|
|
||||||
|
На deployed стенде проверить:
|
||||||
|
|
||||||
|
- `window` tool выполняется и не возвращает бесконечный поток;
|
||||||
|
- `session` tool создает записи в `/stream-sessions`;
|
||||||
|
- `async_job` tool создает записи в `/async-jobs`;
|
||||||
|
- UI pages `/stream-sessions` и `/async-jobs` не пустые после вызовов.
|
||||||
|
|
||||||
|
Если есть real upstream:
|
||||||
|
|
||||||
|
- `WebSocket window/session`
|
||||||
|
- `SOAP import + inspect + test run`
|
||||||
|
|
||||||
|
Если real upstream нет, это остается на локальном e2e/fixture stack.
|
||||||
|
|
||||||
|
## 11. Acceptance criteria
|
||||||
|
|
||||||
|
Deploy/staging smoke считается успешным, если:
|
||||||
|
|
||||||
|
- server health зеленый;
|
||||||
|
- reverse proxy отдает правильные routes;
|
||||||
|
- login/session живы;
|
||||||
|
- all core pages открываются;
|
||||||
|
- secrets/auth/wizard связка работает;
|
||||||
|
- минимум `REST`, `GraphQL`, `gRPC` проходят `create -> test-run -> publish -> MCP call`;
|
||||||
|
- streaming pages отображают реальные session/job artifacts;
|
||||||
|
- нет критичных JS ошибок в браузере.
|
||||||
|
|
||||||
|
## 12. Если что-то падает
|
||||||
|
|
||||||
|
Порядок разбора:
|
||||||
|
|
||||||
|
1. `docker compose ps`
|
||||||
|
2. `docker compose logs --tail=100 admin-api`
|
||||||
|
3. `docker compose logs --tail=100 mcp-server`
|
||||||
|
4. `curl` локальных `/health`
|
||||||
|
5. `curl -I` публичных routes
|
||||||
|
6. browser devtools:
|
||||||
|
- network;
|
||||||
|
- console;
|
||||||
|
- `/api/auth/session`;
|
||||||
|
- page-specific API requests
|
||||||
|
|
||||||
|
Не надо сразу трогать БД, env или `nginx`, пока не найден точный failing layer.
|
||||||
@@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
Документ не привязан к конкретному hypervisor, cloud provider, типу VM или домашней инфраструктуре.
|
Документ не привязан к конкретному hypervisor, cloud provider, типу VM или домашней инфраструктуре.
|
||||||
|
|
||||||
|
Практический post-deploy smoke checklist вынесен отдельно в [deploy-and-staging-smoke.md](/home/a.tolmachev/code/rust/mcpaas/docs/deploy-and-staging-smoke.md).
|
||||||
|
|
||||||
## 2. Базовая модель деплоя
|
## 2. Базовая модель деплоя
|
||||||
|
|
||||||
Для MVP принимается контейнерная модель:
|
Для MVP принимается контейнерная модель:
|
||||||
|
|||||||
Reference in New Issue
Block a user