[test][ci] e2e на каждый коммит в develop: не блокируют deploy, уведомление по почте #187
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Цель
Гонять e2e-тесты на каждый push в
develop. Они не должны блокировать сборку и публикацию образа (build→:develop): при падении достаточно красного статуса run'а и стандартного письма GitHub автору коммита (Telegram/Slack не нужны).Покрываем оба существующих e2e-набора:
apps/server(test:e2e, NestJS + supertest);packages/mcp(test:e2e,test-e2e.mjsпротив живого сервера).Текущее состояние
.github/workflows/develop.ymlна push вdevelopзапускает reusabletest.yml(jobtest), затемbuild(needs: test) собирает и пушит образghcr.io/vvzvlad/gitmost:develop.test.ymlгоняетpnpm -r test— это только юнит/spec в каждом пакете. e2e в CI не запускаются:apps/servertest=jest(юнит,*.spec.ts); e2e — отдельный скриптtest:e2e(jest --config test/jest-e2e.json), который не вызывается;packages/mcptest= unit+mock; e2e — отдельныйtest:e2e(node test-e2e.mjs), который не вызывается.Что нужно каждому набору
Серверный e2e (
apps/server/test/app.e2e-spec.ts)Поднимает полный
AppModuleчерезTest.createTestingModule+app.init(). Требуется инфраструктура и env (см.apps/server/src/integrations/environment/environment.validation.ts):CREATE EXTENSION vector) — образpgvector/pgvector:pg18, как вdocker-compose.yml;DATABASE_URL(postgres://…),REDIS_URL(redis://…),APP_SECRET(≥ 32 символов и неREPLACE_WITH_LONG_SECRET);APP_URLопционально;pnpm --filter ./apps/server migration:latest;pretestсервера сам собирает@docmost/editor-ext(учтено).Сейчас сам тест тривиальный (
GET /→Hello World!), но как каркас уже валиден — добавляем инфраструктуру, тесты дорастут позже.MCP e2e (
packages/mcp/test-e2e.mjs)Бьёт по живому Docmost и использует не только REST
/api, но и collaboration websocket (HocuspocusProvider, путь/collab— см.packages/mcp/src/lib/collaboration.ts: http→ws, срезается/api, домонтируется/collab). Главный процесс монтируетCollaborationModuleв том же сервере (Dockerfile:CMD ["pnpm","start"]→node dist/main), поэтому одного серверного процесса хватает для REST + ws.Нужно:
test-e2e.mjsимпортирует./build/client.js, аpre-хук есть только уtest(pretest=tsc), не уtest:e2e. Значит явный шагpnpm --filter @docmost/mcp build;POST /api/auth/setup(гардSetupGuard: работает только приCLOUD != trueи когда воркспейсов 0). DTOCreateAdminUserDto:name,email,password, опц.workspaceName;DOCMOST_API_URL(напр.http://localhost:3000/api),DOCMOST_EMAIL,DOCMOST_PASSWORD.Предлагаемая реализация
Добавить в
develop.ymlдва независимых job (e2e-server,e2e-mcp):test/buildна push вdevelop;buildНЕ зависит от них (остаётсяneeds: test) → e2e не блокируют сборку/публикацию:develop;Скетч: job серверного e2e
Скетч: job MCP e2e
Healthcheck:
/api/healthпроверяет БД+Redis (контроллерhealth, глобальный префиксapi); есть и лёгкий/api/health/live→ok.Подводные камни / на что обратить внимание
CREATE EXTENSION vector; обычныйpostgres:18не подойдёт, нуженpgvector/pgvector:pg18.process.exit(1)вenvironment.validation.ts)./collab;node dist/mainэто обеспечивает. При раздельных процессах не забыть collab.test:e2e(./build/client.js);pretestнаtest:e2eне срабатывает.true, иначеSetupGuardзапретит/auth/setup.POST /auth/setupсработает при 0 воркспейсов. В CI БД одноразовая (service-контейнер на job), так что ок.docker compose. Минус — тестируется образ, а не текущий коммит; поэтому рекомендуется сборка из исходников.Definition of Done
develop.ymlдобавлены jobe2e-serverиe2e-mcp, запускаются на push вdevelop.buildпо-прежнемуneeds: testи не зависит от e2e (deploy не блокируется).apps/server test:e2e— зелёный./auth/setup,@docmost/mcp test:e2e— зелёный.Ghost referenced this issue2026-06-25 23:50:05 +03:00
Ghost referenced this issue2026-06-25 23:50:19 +03:00