Проект содержит 4 взаимосвязанных GitHub Actions workflow, которые полностью автоматизируют процесс разработки, тестирования, релизов и деплоя.
Триггер: Ручной запуск через workflow_dispatch
Функциональность:
- Запускает линт и тесты перед релизом
- Автоматически создает ветку
releases/{run_number}для изоляции релиза - Собирает Docker образ и пушит его в Yandex Container Registry с тегами
{run_number}и{run_number}_latest - Создает Git тег
v{run_number}для версионирования - Автоматически создает GitHub Issue с полной информацией о релизе:
- Дата и автор релиза
- Версия релиза
- Docker образ для деплоя
- История коммитов с предыдущего релиза
- Автоматически обновляет
CHANGELOG.mdв ветке релиза с историей изменений
Особенности:
- Использует
github.run_numberдля уникальной нумерации релизов - Анализирует Git историю для определения коммитов с предыдущего релиза
- Форматирует и структурирует информацию для удобного чтения
Триггер: Ручной запуск через workflow_dispatch с параметром release_version
Функциональность:
- Запускает линт и тесты на ветке релиза
- Умное вычисление номера фикса: анализирует
CHANGELOG.mdдля определения последнего номера фикса и автоматически инкрементирует его - Собирает Docker образ с тегами
{version}_fix{N}и{version}_latest - Создает Git тег
v{version}_fix{N} - Автоматически находит GitHub Issue соответствующего релиза и добавляет комментарий с информацией о хотфиксе:
- Дата и автор фикса
- Версия фикса (
v{version}_fix{N}) - Docker образ для деплоя
- История коммитов с последнего релиза/фикса
- Автоматически обновляет
CHANGELOG.mdв соответствующей секции релиза
Особенности:
- Работает с существующими ветками релизов (
releases/{version}) - Умная логика определения базового тега для вычисления изменений
- Интеграция с GitHub Issues API для автоматического комментирования
Триггер: Ручной запуск через workflow_dispatch с параметром release_version
Функциональность:
- Проверяет наличие Docker образа в Yandex Container Registry перед деплоем
- Настраивает SSH соединение с продакшн сервером
- Подключается к виртуальной машине по SSH
- Пуллит актуальный Docker образ из registry
- Запускает контейнер на порту 80 (маппинг на внутренний 3000)
- Автоматически находит GitHub Issue релиза и добавляет комментарий о деплое в продакшн:
- Дата деплоя
- Автор деплоя
Особенности:
- Безопасное управление SSH ключами через GitHub Secrets
- Проверка существования образа перед деплоем предотвращает ошибки
- Автоматическое логирование деплоя в GitHub Issues
Триггер: Автоматический при создании Pull Request в ветку main
Функциональность:
- Автоматически запускает линт при создании PR
- Автоматически запускает тесты при создании PR
- Блокирует мерж PR, если линт или тесты не проходят
Особенности:
- Защита основной ветки от некорректного кода
- Параллельное выполнение линта и тестов для ускорения CI
Все workflow тесно интегрированы между собой:
PR → [lint + test] → main
↓
[Release] → создает Issue, ветку, Docker образ, тег, CHANGELOG
↓
[Hotfix] → комментирует Issue, обновляет CHANGELOG, создает фикс-образ
↓
[Production] → деплоит на сервер, комментирует Issue
- GitHub Actions - автоматизация CI/CD
- Docker - контейнеризация приложения
- Yandex Container Registry - хранение Docker образов
- GitHub Issues API - автоматическое управление issues и комментариями
- SSH - деплой на продакшн сервер
Для работы workflow требуются следующие секреты:
OAUTH_TOKEN- токен для доступа к Yandex Container RegistryREGISTRY_ID- ID реестра в Yandex Container RegistryOPENSSH_PRIVATE_KEY- приватный SSH ключ для подключения к серверуPUBLIC_IP- IP адрес продакшн сервераGITHUB_TOKEN- автоматически предоставляется GitHub Actions для работы с Issues API