Автоматизированная система проверки готовности к выпуску. Агрегирует результаты анализа безопасности, метрик качества кода, покрытия тестами, оценки соответствия и статуса обзора кода в единое решение — пройдено/не пройдено/предупреждение.
Обзор¶
Release Gate реализует процесс 5.20 ГОСТ Р 56939-2024 — анализ влияния неустранённых ошибок на безопасность перед выпуском. Система обеспечивает:
- Конфигурируемые профили с порогами по критичности (ГОСТ, стандартный, минимальный)
- 6 типов проверок: безопасность, качество, тестирование, соответствие, обзор, пользовательские
- Механизм подавления для принятых рисков с датой истечения
- История решений для анализа тенденций
- Интеграция с CI с кодами возврата (0=пройдено, 1=не пройдено, 2=предупреждение)
Быстрый старт¶
# Запуск проверки с профилем по умолчанию
python -m src.cli release check --db path/to/db.duckdb
# Запуск с профилем ГОСТ
python -m src.cli release check --profile gost-56939
# Вывод в формате JSON
python -m src.cli release check --format json --output report.json
# Подавление находки
python -m src.cli release suppress --finding-id F-1 --reason "false_positive"
# Просмотр истории
python -m src.cli release history --limit 5
# Список профилей
python -m src.cli release profiles
Профили¶
Профили определяют набор проверок и их пороговые значения. Три встроенных профиля:
ГОСТ Р 56939-2024¶
Строжайший профиль для соответствия нормативным требованиям:
| Проверка | Тип | Критичность | Порог |
|---|---|---|---|
| Критические уязвимости | security | блокер | max_critical: 0, max_high: 0 |
| Неразрешённые taint-пути | security | блокер | max_unresolved_taint_paths: 0 |
| Уровень соответствия ГОСТ | compliance | блокер | min_compliance_score: 60% |
| Актуальность модели угроз | compliance | блокер | threat_model_required: true |
| Мёртвый код | quality | предупреждение | max_dead_methods_percent: 5% |
| Покрытие тестами | testing | предупреждение | min_coverage_percent: 55% |
| Обзор кода выполнен | review | блокер | require_review_for_security_files: true |
| Находки средней критичности | security | предупреждение | max_medium: 20 |
Стандартный¶
Сбалансированный профиль для внутренних выпусков:
| Проверка | Тип | Критичность | Порог |
|---|---|---|---|
| Критические уязвимости | security | блокер | max_critical: 0, max_high: 5 |
| Сложность кода | quality | предупреждение | max_cyclomatic_complexity_avg: 15 |
| Покрытие тестами | testing | предупреждение | min_coverage_percent: 55% |
Минимальный¶
Профиль только для срочных исправлений:
| Проверка | Тип | Критичность | Порог |
|---|---|---|---|
| Критические уязвимости | security | блокер | max_critical: 0 |
Типы проверок¶
Проверка безопасности¶
Собирает находки из файлов SARIF и шаблонов безопасности CPG. Подсчитывает по критичности (критическая, высокая, средняя, низкая) и сравнивает с пороговыми значениями. Поддерживает обнаружение taint-путей.
Проверка качества¶
Запрашивает метрики качества кода из CPG: - Процент мёртвого кода - Средняя цикломатическая сложность - Процент дублирования кода
Корректно пропускается при недоступности CPG.
Проверка тестирования¶
Проверяет процент покрытия тестами относительно настроенного порога. Источники данных: статистика проекта CPG или конфигурация.
Проверка соответствия¶
Интеграция с модулем соответствия ГОСТ Р 56939-2024. Проверяет: - Общий уровень соответствия - Обязательные процессы в статусе FULL - Актуальность модели угроз
Корректно пропускается при недоступности модуля соответствия.
Проверка обзора кода¶
Проверяет статус обзора кода: - Минимальное количество согласований - Обзор файлов, связанных с безопасностью
Требует параметр base_ref для определения изменённых файлов.
Пользовательская проверка¶
Выполняет пользовательские скрипты с настраиваемым таймаутом. Код возврата 0 = пройдено, иной = не пройдено.
Подавление находок¶
Находки могут быть подавлены (принятый риск):
python -m src.cli release suppress \
--finding-id FINDING_ID \
--reason "accepted_risk" \
--expires 2026-06-01 \
--ticket JIRA-123
Подавления хранятся в SQLite и автоматически истекают. Просроченные подавления больше не исключают находки.
# Список активных подавлений
python -m src.cli release suppressions list
# Удаление подавления
python -m src.cli release suppressions remove --finding-id FINDING_ID
Логика принятия решений¶
- Все проверки профиля выполняются последовательно
- Каждая проверка возвращает результат с настроенной критичностью (блокер/предупреждение/информация)
- Итоговое решение: - ПРОЙДЕНО: Все проверки пройдены - НЕ ПРОЙДЕНО: Хотя бы один блокер не пройден - ПРЕДУПРЕЖДЕНИЕ: Только предупреждения (без блокеров)
Коды возврата¶
| Код | Статус | Описание |
|---|---|---|
| 0 | ПРОЙДЕНО | Все проверки пройдены |
| 1 | НЕ ПРОЙДЕНО | Хотя бы один блокер не пройден |
| 2 | ПРЕДУПРЕЖДЕНИЕ | Только предупреждения (--fail-on-warn для кода 1) |
REST API¶
| Метод | Путь | Описание |
|---|---|---|
| POST | /api/v1/release/check |
Запуск проверок |
| GET | /api/v1/release/profiles |
Список профилей |
| GET | /api/v1/release/history |
История решений |
| POST | /api/v1/release/suppress |
Создание подавления |
| GET | /api/v1/release/suppressions |
Список подавлений |
| DELETE | /api/v1/release/suppressions/{id} |
Удаление подавления |
Инструменты MCP¶
| Инструмент | Описание |
|---|---|
codegraph_release_gate_check |
Запуск проверок |
codegraph_release_gate_profiles |
Список профилей |
codegraph_release_gate_suppress |
Управление подавлениями (список/добавление/удаление) |
Конфигурация¶
Настройка в config.yaml:
release_gate:
enabled: true
default_profile: standard
suppression_db: "data/release_suppressions.sqlite"
history_db: "data/release_history.sqlite"
store_history: true
profiles:
custom-profile:
description: "Пользовательский профиль"
checks:
- id: security.critical
name: "Критические уязвимости"
type: security
severity: blocker
params:
max_critical: 0
Соответствие ГОСТ Р 56939-2024¶
Release Gate удовлетворяет требованиям процесса 5.20:
- 5.20.2.1 (Регламент приёмки): Конфигурируемые профили определяют критерии приёмки
- 5.20.2.2 (Анализ влияния неустранённых ошибок): Неустранённые находки включены в отчёт с оценкой критичности
- 5.20.3.2 (Артефакт: анализ неустранённых ошибок): Отчёт в формате Markdown содержит раздел для неустранённых ошибок
Интеграция с CI¶
GitHub Actions¶
- name: Release Gate
run: |
python -m src.cli release check \
--profile gost-56939 \
--format json \
--output gate-report.json
GitLab CI¶
release-gate:
script:
- python -m src.cli release check --profile standard --fail-on-warn
allow_failure: false