7.5 KiB
Deploy And Staging Smoke
1. Назначение
Этот документ фиксирует обязательный post-deploy smoke pass для staging/production-like окружения.
Он нужен для двух задач:
- быстро проверить, что свежий deploy реально жив, а не просто "docker compose up -d завершился";
- дать следующему агенту и оператору один канонический сценарий проверки после релиза.
Для Community-поставки source of truth для runtime manifests:
deploy/community/docker-compose.ymldeploy/community/.env.example
Результаты прохождения этого checklist нужно заносить в staging-regression-notes.md.
Для полного browser-authenticated прохода использовать отдельный документ:
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; - server deployment path собран из public Community manifest, а не из ad-hoc compose файла;
- включенный
CRANK_DEMO_SEED=true, если нужен предзаполненный smoke state; - bootstrap admin credentials для входа в UI.
3.1. Быстрый automated smoke
Есть helper script:
just staging-smoke https://<domain>
или напрямую:
bash scripts/staging-smoke.sh https://<domain>
Он проверяет:
- public routes;
/api/auth/sessionJSON contract;/mcp/health;- legacy
/html/...redirects.
Это не заменяет ручной smoke pass ниже, а только быстро отсеивает грубые deploy/routing поломки.
4. Server-side smoke
На сервере:
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:
curl --fail --silent http://127.0.0.1:3001/health
curl --fail --silent http://127.0.0.1:3002/health
5. Reverse proxy smoke
Проверить снаружи:
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.
Дополнительно проверить:
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
В браузере:
- Открыть
/login - Проверить:
- нет redirect loop;
- invalid login показывает ошибку;
- страница честно помечает password-only flow;
Forgot password,Google SSO,Request accessвизуально disabled/planned.
- Выполнить login.
- Проверить 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
Обязательная связка:
- Открыть
/secrets - Создать secret
- Создать или выбрать auth profile
- Открыть
/wizard/ - На шаге 2:
- выбрать existing auth profile;
- проверить quick-create secret;
- проверить quick-create auth profile;
- Сохранить upstream
- Выполнить
Test run
Smoke считается успешным, если:
- wizard не требует
${secrets.*}; auth_profile_refреально доезжает до execution path;- plaintext не возвращается после create/rotate.
9. MCP and protocol smoke
Использовать примеры из public-smoke-targets.md.
Обязательные ручные кейсы:
REST->Open-MeteoGraphQL->CountriesgRPC->grpcb.in
Порядок:
- создать operation;
- выполнить
Test run; - publish;
- привязать к agent;
- проверить MCP path;
- выполнить
tools/listиtools/call.
10. Streaming smoke
На deployed стенде проверить:
windowtool выполняется и не возвращает бесконечный поток;sessiontool создает записи в/stream-sessions;async_jobtool создает записи в/async-jobs;- UI pages
/stream-sessionsи/async-jobsне пустые после вызовов.
Если есть real upstream:
WebSocket window/sessionSOAP 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. Если что-то падает
Порядок разбора:
docker compose psdocker compose logs --tail=100 admin-apidocker compose logs --tail=100 mcp-servercurlлокальных/healthcurl -Iпубличных routes- browser devtools:
- network;
- console;
/api/auth/session;- page-specific API requests
Не надо сразу трогать БД, env или nginx, пока не найден точный failing layer.