Проверка готовности к выпуску

Автоматизированная система проверки готовности к выпуску. Агрегирует результаты анализа безопасности, метрик качества кода, покрытия тестами, оценки соответствия и статуса обзора кода в единое решение — пройдено/не пройдено/предупреждение.

Обзор

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

Логика принятия решений

  1. Все проверки профиля выполняются последовательно
  2. Каждая проверка возвращает результат с настроенной критичностью (блокер/предупреждение/информация)
  3. Итоговое решение: - ПРОЙДЕНО: Все проверки пройдены - НЕ ПРОЙДЕНО: Хотя бы один блокер не пройден - ПРЕДУПРЕЖДЕНИЕ: Только предупреждения (без блокеров)

Коды возврата

Код Статус Описание
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