Перейти до основного вмісту

Перелік завдань перед випуском

Цей документ є офіційною інструкцією щодо процедури затвердження та публікації.

Умови, що перешкоджають випуску

Випуск заблоковано, якщо хоча б одна з наведених нижче умов не виконується:

  1. Відсутні маркери конфліктів під час об’єднання у відстежуваних файлах коду/документації.
  2. Перевірки відповідності назв гігієнічним нормам успішно пройдено для публічних документів.
  3. Налаштуйте/виконайте перевірки цілісності збірки (cmake -S . -B ... та cmake --build ... --target sima_neat).
  4. Перевірка посилань у документації успішно завершена в режимі суворого контролю (DOCS_STRICT_LINKS=1).
  5. Робоча копія очищена після виконання етапів генерації.
  6. Відсутність невирішених проблем, пов’язаних із помилками та некоректною роботою, перед відправленням змін і в релізних версіях.
  7. Перевірки на виявлення помилок, коректність, стійкість до навантажень і наявність вразливостей успішно пройдені у поточній версії.
  8. Охоронний бар’єр біля сховища моделей має зелений колір (model-archive-security-gate).
  9. Встановіть зелений димовий клапан (install-smoke).
  10. Тест на виявлення погіршення продуктивності успішно пройдено (perf-regression-gate).
  11. Стабільність каналу тестування на тривалий термін підтверджено, можна випускати версії (soak-weekly).
  12. Для версій-кандидатів на випуск «зелена зона» в системі фаззінг-тестування (fuzz-nightly).
  13. Для суворих тестових смуг використовується зелений zero-skip-gate, що дозволяє пропускати всі об’єкти.
  14. Необхідні файли для керування присутні та дійсні:
  • .github/CODEOWNERS
  • .github/PULL_REQUEST_TEMPLATE.md
  • CONTRIBUTING.md
  • docs/develop-apps/contribute/release-checklist.md
  1. Метадані для релізу завершено:
  • project(SimaNeat VERSION x.y.z) оновлено у файлі CMakeLists.txt.
  • package-version та platform-version оновлюються у файлі deps/manifest.json за потреби.
  • modelzoo-version явно обирає перевірену версію Model Zoo, якщо вона відрізняється від platform-version; якщо цей параметр не вказано, для Model Zoo буде використано значення за замовчуванням platform-version.
  • abi-version у файлі deps/manifest.json збільшується кожного разу, коли змінюється структура публічного типу C++. експортовані зміни в бінарному контракті несумісні; всі програми, написані мовою C++, і бібліотеки Python перекомпілюються з урахуванням цього ABI.
  • У файлі CHANGELOG.md є запис ## [x.y.z].
  • примітки до випуску, підготовлені в розділі «release/tag»

У процесі підготовки до релізу не допускається наявність списку «відомих проблем, що спричиняють збої». Будь-яка регресія, яка призводить до збоїв, блокує випуск, доки її не буде виправлено.

Необхідні перевірки статусу

Наступні перевірки є обов’язковими для чернеток змін, що подаються для релізу, та тегів релізу:

  • repo-hygiene
  • configure-build-sanity
  • docs-link-check
  • crash-correctness-gate
  • model-archive-security-gate
  • install-smoke
  • perf-regression-gate
  • zero-skip-gate
  • soak-weekly (обов’язково для тегів, що використовуються для випуску версій).
  • fuzz-nightly (необхідно для версій-кандидатів на випуск)
  • stress-gate
  • asan-ubsan-gate
  • release-policy-check

Ці перевірки реалізовано в:

  • .github/workflows/release-gate.yml
  • .github/workflows/test-crash-correctness-nightly.yml
  • .github/workflows/model-archive-security.yml
  • .github/workflows/install-smoke.yml
  • .github/workflows/perf-regression.yml
  • .github/workflows/zero-skip.yml
  • .github/workflows/test-soak-weekly.yml
  • .github/workflows/long-tests-weekly.yml
  • .github/workflows/vulcan-fuzz-nightly.yml
  • .github/workflows/test-stress-nightly.yml
  • .github/workflows/sanitizers.yml

Забезпечте унікальність виконання кожної операції, щоб уникнути повторень:

  • Непублічні запити на внесення змін (PR) у гілку main запускають перевірки model-archive-security, install-smoke, perf-regression та zero-skip у межах їхніх окремих робочих процесів.
  • Запити на внесення змін для релізів (release/*, головні гілки) і гілки релізів (release/**, v*) запускають ті самі процеси з файлу .github/workflows/release-gate.yml.

Захист гілок і тегів у GitHub

Налаштуйте параметри репозиторію GitHub:

  1. Захистіть main:
    • Вимагайте створення запиту на злиття перед об’єднанням.
    • Необхідно отримати схвалення від принаймні одного відповідального за код (рекомендується отримувати схвалення від двох, якщо це можливо).
    • Відхиляйте застарілі підтвердження для нових змін.
    • Забезпечте виконання всіх необхідних перевірок статусу.
    • Заборонити примусове надсилання змін.
    • Використовуйте лише метод «сквош» або лінійну структуру історії змін.
  2. Захистіть теги v*, щоб обмежити коло користувачів, яким дозволено створювати теги для релізів.

Процес випуску оновлень

  1. Виріжте release/x.y.z із зеленого main.
  2. Заморозьте об’єднання змін, які не призначені для випуску нової версії.
  3. Запустіть робочий процес перевірки релізів у гілці релізів.
  4. Створіть vX.Y.Z-rcN тег(и) для перевірки кандидатів.
  5. Перемістіть до остаточної vX.Y.Z мітки.
  6. Швидко перенесіть зміни з гілки для випуску назад до гілки main.
  7. Опублікуйте примітки до випуску та інформацію про питання, що виникли після випуску.

Оперативні примітки

  • Не звільняйте гілки від бруду.
  • Не допускається випуск версії, що містить код, який не було перевірено.
  • Не здійснюйте випуск, якщо обов’язкові перевірки не пройдено (показано червоним кольором).
  • Не дозволяється примусове завантаження змін, якщо локальна перевірка на наявність помилок/відповідність вимогам не пройдена.
  • Не передбачено жодного способу ручного обходу системи у разі виникнення проблем із дотриманням санітарних норм.

Угода щодо регресії продуктивності

  • Точка входу для перевірки продуктивності: scripts/ci/run_perf_regression_gate.sh.
  • Базові значення визначаються в межах профілю tests/perf/baselines/v2/modalix_default/:
    • profile.json визначає фіксований контракт для середовища Modalix.
    • один файл сценарію на кожен ідентифікатор сценарію (<scenario_id>.json).
  • Необхідні сценарії:
    • runtime_session_sync_rgb
    • runtime_session_async_rgb
    • runtime_graph_fanout
    • runtime_graph_join_bundle
    • runtime_codec_mjpeg_decode
    • runtime_codec_h264_decode
    • runtime_codec_h265_decode
    • runtime_model_archive_load
  • Під час кожного запуску тестування продуктивності створюються файли результатів для кожного сценарію в build-perf-gate/perf_results/.
  • Кожен результат має містити:
    • scenario_id
    • modalix_profile_id
    • status
    • failure_class
    • reason_code
    • metrics
    • run_meta
    • timestamp
  • Будь-яка класифікація, що відповідає критеріям REGRESSION, HARNESS_ERROR або ENV_BROKEN, блокує смугу руху.