CI/CD
GitHub Actions workflows для автоматического запуска тестов и деплоя документации.
Обзор
| Workflow | Триггер | Описание |
|---|---|---|
ci.yml | Push / PR | Lint, format, typecheck |
e2e-dev.yml | saas-api / saas-client deploy → dev | E2E тесты на dev-окружении |
e2e-prod.yml | saas-api / saas-client deploy → prod | Smoke E2E тесты на production |
docs.yml | Push (docs/**) | Деплой документации на CF Pages |
Схема запуска E2E тестов
E2E тесты запускаются автоматически после деплоя через repository_dispatch. При деплое saas-api прогоняются все тесты, при деплое saas-client — только client тесты (API не менялся).
ci.yml
Проверка качества кода при каждом push и pull request:
pnpm lint # ESLint
pnpm format:check # Prettier
pnpm typecheck # TypeScripte2e-dev.yml
Полные E2E тесты на dev-окружении. API и Client тесты запускаются параллельно.
Триггеры:
repository_dispatch: dev-deploy-completed— после деплоя saas-api на dev → запускает API + Client тестыrepository_dispatch: client-deploy-completed— после деплоя saas-client на dev → запускает только Client тестыworkflow_dispatch— ручной запуск (все тесты)
Джобы:
- e2e-api — API тесты (
pnpm test:api), пропускается приclient-deploy-completed - e2e-client — Client browser тесты (
pnpm test:client), запускается всегда
Concurrency
Используется concurrency: e2e-dev с cancel-in-progress: true — повторный триггер отменяет текущий запуск.
e2e-prod.yml
Smoke тесты на production — только health check и аутентификация.
Триггеры:
repository_dispatch: prod-deploy-completed— после деплоя saas-api или saas-client на prodworkflow_dispatch— ручной запуск
Тесты: tests/api/health.e2e.ts + tests/api/auth.e2e.ts
Production
На production запускается минимальный набор smoke тестов, чтобы не создавать лишнюю нагрузку и тестовые данные.
docs.yml
Деплой VitePress документации на Cloudflare Pages.
Триггеры:
- Push в
main/devпри изменениях вdocs/**или.github/workflows/docs.yml - Ручной запуск (
workflow_dispatch)
Шаги:
- Checkout кода
- Setup Node.js 22 + pnpm
- Установка зависимостей (
pnpm install --frozen-lockfile) - Сборка документации (
pnpm docs:build) - Создание CF Pages проекта (если не существует)
- Деплой через
cloudflare/wrangler-action@v3
Секреты GitHub:
| Секрет | Описание |
|---|---|
CLOUDFLARE_PAGES_API_TOKEN | API токен Cloudflare |
CLOUDFLARE_ACCOUNT_ID | ID аккаунта Cloudflare |
CF Pages проект: saas-e2e-docs
Ветки
- Push в
main→ production deployment - Push в
dev→ preview deployment с отдельным URL
Автоматическое создание проекта
Workflow автоматически создает CF Pages проект при первом деплое:
PROJECT_EXISTS=$(curl -s -X GET \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects/$PROJECT_NAME" \
-H "Authorization: Bearer $API_TOKEN" | jq '.success')
if [ "$PROJECT_EXISTS" != "true" ]; then
curl -s -X POST \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/pages/projects" \
-d "{\"name\": \"$PROJECT_NAME\", \"production_branch\": \"main\"}"
fiСледующие шаги
- Конфигурация — настройка Playwright
- Быстрый старт — локальная настройка